sql >> Base de Datos >  >> RDS >> Mysql

¿Qué significa escapar de una cuerda?

Escapar una cadena significa reducir la ambigüedad en las comillas (y otros caracteres) utilizados en esa cadena. Por ejemplo, cuando está definiendo una cadena, normalmente la encierra entre comillas dobles o simples:

"Hello World."

Pero, ¿y si mi cadena tuviera comillas dobles dentro?

"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 usar comillas simples alrededor de mi cadena:

'Hello "World."'

O puedo escapar de mis comillas:

"Hello \"World.\""

Cualquier cita que esté precedida por una barra inclinada se escapo , y entendido como parte del valor de la cadena.

Cuando se trata de consultas, MySQL tiene ciertas palabras clave que vigila que no podemos usar en nuestras consultas sin causar cierta confusión. Supongamos que tuviéramos una tabla de valores en la que una columna se llamara "Seleccionar" y quisiéramos seleccionar eso:

SELECT select FROM myTable

Ahora hemos introducido cierta ambigüedad en nuestra consulta. Dentro de nuestra consulta, podemos reducir esa ambigüedad usando tildes invertidas:

SELECT `select` FROM myTable

Esto elimina la confusión que hemos introducido al utilizar un criterio inadecuado al seleccionar los nombres de los campos.

Mucho de esto puede manejarse simplemente pasando sus valores a través de mysql_real_escape_string() . En el siguiente ejemplo, puede ver que estamos pasando datos enviados por el usuario a través de esta función para garantizar que no cause ningún problema para nuestra consulta:

// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            mysql_real_escape_string($user),
            mysql_real_escape_string($password));

Existen otros métodos para escapar cadenas, como add_slashes , addcslashes , quotemeta , y más, aunque encontrará que cuando el objetivo es ejecutar una consulta segura, en general los desarrolladores prefieren mysql_real_escape_string o pg_escape_string (en el contexto de PostgreSQL.