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 ?
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.
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
.
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 quemysql_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.
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
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