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.