Escapar una cadena significa reducir la ambigüedad entre comillas (y otros caracteres) utilizados en esa cadena. Por ejemplo, cuando se está definiendo una cadena, que normalmente rodean en comillas dobles o comillas simples:
"Hello World."
Pero lo que si mi cadena tenía comillas dobles dentro de ella?
"Hello "World.""
Ahora tengo ambigüedad: el intérprete no sabe dónde termina mi cadena. Si quiero mantener mis comillas dobles, tengo un par de opciones. Podría utilizar comillas simples alrededor de mi cadena:
'Hello "World."'
O puedo escapar de mis citas:
"Hello \"World.\""
Cualquier cita que está precedido por una barra es escaparon, y entiende que es parte de la valor de la cadena.
Cuando se trata de consultas, MySQL tiene ciertas palabras clave que observa que no podemos usar en nuestras consultas sin causar confusión. Supongamos que tenemos una tabla de valores en una columna fue nombrado "Seleccionar", y queríamos para seleccionar lo siguiente:
SELECT select FROM myTable
ahora hemos introducido cierta ambigüedad en nuestra consulta. Dentro de nuestra consulta, podemos reducir esa ambigüedad mediante el uso de copias de las garrapatas:
SELECT `select` FROM myTable
Esto elimina la confusión que hemos introducido mediante el uso de la falta de juicio en la selección de nombres de campo.
Mucho de esto puede ser manejado por usted simplemente pasando sus valores a través de mysql_real_escape_string()
. En el siguiente ejemplo se puede ver que estamos pasando los datos enviados por los usuarios a través de esta función para asegurarse de que no causará ningún problema para nuestra consulta: existen
// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
Otros métodos para cuerdas escapan, como add_slashes
, addcslashes
, quotemeta
, y más, aunque usted encontrará que cuando el objetivo es ejecutar una consulta de seguridad, por lo general los desarrolladores prefieren mysql_real_escape_string
o pg_escape_string
(en el contexto de PostgreSQL.
PS podría tener apenas le pidió a un amigo y No me hice el tonto, pero pensé que habría mucha gente como yo preguntándome de qué está hablando esta cosa. – Brett