Pregunta

Me estaba preguntando si se hace una diferencia si mysql_real_escape de datos más de una vez?

Así que si escapaba de datos en una parte de mi sitio web, y luego de nuevo en otra parte del código. ¿Sería esto un problema? O hacer una diferencia?

¿Fue útil?

Solución

Sí. Te obtener barras invertidas adicionales innecesarios.

Otros consejos

El lugar adecuado para mysql_real_escape es justo antes de se envía la consulta para guardar los datos. Todos los demás casos en cualquier otro lugar en el guión es un importante fallo de diseño.

Esto debería preferiblemente en una db propia clase, por supuesto.

Sí, sería un problema.

Por ejemplo:
si a es "Casa de Joe", la primera llamada producirá "Joe \ 's House" y el segundo producirá "Joe \\\' s House", el ahorro de la barra invertida en la base de datos.

Esto es similar al problema que surge cuando el servidor web tiene habilitadas las comillas mágicas y utilizar mysql_real_escape_string en la entrada desde el cliente. Esto se soluciona por:

if (! get_magic_quotes_gpc()) {
    $value = mysql_real_escape_string($_GET["value"]);
} else {
    $value = mysql_real_escape_string(stripslashes($_GET["value"])); 
}

(Para el último ejemplo ver http://www.php.net/get_magic_quotes_gpc )

[I editado la respuesta para reflejar las correcciones en los comentarios a continuación]

Por supuesto, los datos sería de doble escape.

No use mysql_real_escape() en absoluto, con parámetros consultas a través de mysqli tener estado pegando el tiempo suficiente.

Sí, va a ser un problema del exceso de escape. Este es el mismo para cualquier escape, independientemente de qué es exactamente lo que hace. Por ejemplo, si quieres escapar comillas dobles en la cadena siguiente regla común:

bla "foo"

después de un escape se vuelve

bla \"foo\"

después de dos se convierte

bla \\\"foo\\\"

y así sucesivamente. Número de "unescapements" debe coincidir exactamente con el número de los "escapes". Se podía ver manifestaciones de este problema en algunos sitios que el exceso de escapar de algunos caracteres en los campos de texto, por lo que se convierte en apóstrofe sencillo \' en la salida.

No es posible distinguir entre una escapado y una cadena sin escapar, porque lo que se parece a una cadena escapada fue la intención de cadena sin escapar. Por lo tanto, tratando de escapar de nuevo, sería escapar del escape -. Y el escapado una vez el texto será lo que lee MySQL

Por lo tanto, nunca debe escapar más de una vez.

Sin embargo, la mejor solución es utilizar consultas paramterized, desde entonces, no es necesario para escapar en absoluto.

Sí, se hace una diferencia:

$string = "I'm Chuck!";
mysql_escape_string($string); // I\'m Chuck!
mysql_escape_string(mysql_escape_string($string)); // "I\\\'m Chuck!
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top