2010-09-08 19 views
48

Así que esto es algo que todos deberíamos saber, y jugó en mi mente cuando me visto ..mysql_escape_string VS mysql_real_escape_string

Sé que mysql_escape_string es obsoleto desde el 5,3 pero lo que era la diferencia real en mysql_real_escape_string.

Lo que pensé que mysql_real_escape_string es exactamente igual que mysql_escape_string aparte de mysql_real_escape_string toma un segundo argumento para el recurso mysql.

entonces pensé que debía haber alguna diferencia en cuanto a cómo se manejan las cadenas porque no habría necesidad de 2 funciones.

Entonces pensé que la diferencia se debía únicamente a las codificaciones locales y de caracteres. ?

¿alguien puede aclarar esto por mí?

Respuesta

85

La diferencia es que mysql_escape_string solo trata la cadena como bytes sin formato, y agrega el escape donde cree que es apropiado.

mysql_real_escape_string, por otro lado, utiliza la información sobre el juego de caracteres utilizado para la conexión MySQL. Esto significa que la cadena se escapó mientras trata adecuadamente los caracteres de varios bytes; es decir, no insertará caracteres que escapen en medio de un personaje. Es por eso que necesita una conexión para mysql_real_escape_string; es necesario para saber cómo debe tratarse la cuerda.

Sin embargo, en lugar de escaparse, es una mejor idea usar consultas parametrizadas de la biblioteca MySQLi; anteriormente ha habido errores en la rutina de escape, y es posible que algunos puedan volver a aparecer. La parametrización de la consulta es mucho, mucho más difícil de desordenar, por lo que es menos probable que pueda verse comprometido por un error de MySQL.

+6

1 por mencionar declaraciones preparadas – Jacco

+0

yo uso DOP, esto era algo que necesitaba saber para fines educativos. – RobertPitt

+0

También hay un mysqli_escape_string(). ¿También hace lo mismo que mysql_escape_string? si mysql_escape_string está en desuso, ¿por qué hay esta función disponible y en mysqli también? – Lykos

2

Bueno ... más o menos, sí. Tiene en cuenta el conjunto de caracteres de la conexión MySQL.

http://php.net/mysql_escape_string

Esta función es idéntica a excepción de que mysql_real_escape_string()mysql_real_escape_string() recibe un gestor de conexión y escapa la cadena de acuerdo con el conjunto de caracteres actual. mysql_escape_string() no toma un argumento de conexión y no respeta la configuración del juego de caracteres actual.

3

mysql_escape_string no está en desuso de 5.3 pero, para 4.3.0 y superior. Por lo tanto, cualquier persona que use la versión PHP anterior o 4.3.0 debe usar mysql_real_escape_string.

si se utiliza php < 4.3.0, de hacer sus magic_quotes_gpc active de php.ini, aunque se recomienda para actualizar, pero si su código tendrá problema que asegúrese de usar, y magic_quotes_gpcaddslash función en lugar de mysql_escape_string.

1

ahora ambas de estas funciones están en desuso en

PHP 4> = 4.3.0 y PHP 5. Ellos recomiendan el uso de PDO_MySQL extensión

Cuestiones relacionadas