cadena de escape de mysql VS cadena de escape real de mysql


Así que esto es algo que todos deberíamos saber, y jugamos en mi mente cuando lo vi por primera vez..

Sé que mysql_escape_string está en desuso de 5.3, pero cuál fue la diferencia real en mysql_real_escape_string.

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

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

So entonces pensé que la diferencia se debía puramente a la configuración regional y a las codificaciones de caracteres. ?

¿Puede alguien aclararme esto ?

Author: Cheekysoft, 2010-09-08

4 answers

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

mysql_real_escape_string, por otro lado, utiliza la información sobre el conjunto de caracteres utilizado para la conexión MySQL. Esto significa que la cadena se escapa mientras se tratan caracteres multibyte correctamente; es decir, no insertará caracteres de escape en el medio de un carácter. Es por eso que necesita una conexión para mysql_real_escape_string; es necesario para saber cómo debe ser la cadena tratar.

Sin embargo, en lugar de escapar, es mejor usar consultas parametrizadas de la biblioteca MySQLi; anteriormente ha habido errores en la rutina de escape, y es posible que algunos vuelvan a aparecer. Parametrizar la consulta es mucho, mucho más difícil de estropear, por lo que es menos probable que pueda verse comprometido por un error de MySQL.

 85
Author: Michael Madsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-08 07:51:05

mysql_escape_string no está en desuso de 5.3 pero, para 4.3.0 y superior. Así que cualquiera que use la versión de PHP anterior / o 4.3.0 debería usar mysql_real_escape_string.

Si usas php < 4.3.0, entonces haz tu magic_quotes_gpc active desde php.ini, aunque se recomienda actualizar, pero si su código tendrá un problema, asegúrese de usar la función magic_quotes_gpc y addslash en lugar de mysql_escape_string.

 3
Author: Rocky Sharma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-27 13:44:01

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

Http://php.net/mysql_escape_string

Esta función es idéntica a mysql_real_escape_string() excepto que mysql_real_escape_string() toma un controlador 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 actual del conjunto de caracteres.

 2
Author: deceze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-08 07:49:27

Ahora ambas funciones están obsoletas en

PHP 4> = 4.3.0 y PHP 5. Recomiendan usar la extensión PDO_MySQL

 1
Author: Jeff_Alieffson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-25 10:52:27