Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O que significa escapar de uma string?


Escapar uma string significa reduzir a ambiguidade nas aspas (e outros caracteres) usados ​​nessa string. Por exemplo, quando você está definindo uma string, normalmente você a coloca entre aspas duplas ou aspas simples:
"Hello World."

Mas e se minha string tivesse aspas duplas dentro dela?
"Hello "World.""

Agora eu tenho ambiguidade - o interpretador não sabe onde minha string termina. Se eu quiser manter minhas aspas duplas, tenho algumas opções. Eu poderia usar aspas simples em torno da minha string:
'Hello "World."'

Ou posso escapar das minhas citações:
"Hello \"World.\""

Qualquer citação precedida por uma barra é escapada , e entendido como parte do valor da string.

Quando se trata de consultas, o MySQL tem certas palavras-chave que ele observa que não podemos usar em nossas consultas sem causar alguma confusão. Suponha que tivéssemos uma tabela de valores em que uma coluna fosse chamada de "Selecionar" e queríamos selecionar isso:
SELECT select FROM myTable

Introduzimos agora alguma ambiguidade em nossa consulta. Em nossa consulta, podemos reduzir essa ambiguidade usando back-ticks:
SELECT `select` FROM myTable

Isso remove a confusão que introduzimos ao usar o mau julgamento na seleção de nomes de campo.

Muito disso pode ser tratado para você simplesmente passando seus valores através de mysql_real_escape_string() . No exemplo abaixo, você pode ver que estamos passando dados enviados pelo usuário por meio dessa função para garantir que não cause problemas para nossa consulta:
// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            mysql_real_escape_string($user),
            mysql_real_escape_string($password));

Existem outros métodos para escapar de strings, como add_slashes , addcslashes , quotemeta , e muito mais, embora você descubra que quando o objetivo é executar uma consulta segura, grandes desenvolvedores preferem mysql_real_escape_string ou pg_escape_string (no contexto do PostgreSQL.