2008-09-18 16 views
9

mysql_real_escape_string y addslashes se usan para escanear datos antes de la consulta de la base de datos, entonces, ¿cuál es la diferencia? (Esta pregunta no se acerca parametrizada consultas/DOP/mysqli)¿Cuál es la diferencia entre mysql_real_escape_string y addslashes?

+0

similares a esta pregunta: http://stackoverflow.com/questions/534742/what-does-mysql- real-escape-string-do-that-addslashes-doesnt – Zack

Respuesta

14

string mysql_real_escape_string (string $unescaped_string [, resource $link_identifier ])
mysql_real_escape_string() llama mysql_real_escape_string función de biblioteca de MySQL, que antepone barras invertidas a los siguientes caracteres:. \ X00 \ n \ r, \,' ", y \ X1A

string addslashes (string $str)
Devuelve una cadena con barras diagonales inversas antes de los caracteres que deben citarse en las consultas de la base de datos, etc. Estos caracteres son comillas simples ('), comillas dobles ("), barras invertidas (\) y NUL (el byte NULO).

Afectan a diferentes caracteres. mysql_real_escape_string es específico de MySQL. Addlaslas es solo una función general que puede aplicarse a otras cosas, así como a MySQL.

+0

Acabas de copiar las definiciones y realmente no respondiste la pregunta de qué es realmente la diferencia, es decir, cuáles son los usos y cuáles son las trampas, de qué manera es una función mejor que el otro. Mejor respuesta está aquí: http://stackoverflow.com/a/3473077/1335996 –

+1

Lea de nuevo y verá el párrafo final donde afirmé que los diferentes caracteres se ven afectados, lo que resume la documentación citada. Verás que la pregunta fue respondida. La pregunta no pedía "por qué uno es mejor que el otro" o "beneficios y trampas". La respuesta vinculada entra en más profundidad y si vale la pena leerla, si lo anterior aún no está claro para usted, pero no veo que sea necesario intentar abrir agujeros en mi respuesta. –

0

Parece que mysql_real_escape_string es binario seguro - los estados de documentación:

Si los datos binarios se va a insertar, esta función debe ser utilizado.

Creo que es probablemente más seguro usar siempre mysql_real_escape_string que addslashes.

+1

Creo que es probablemente más seguro * utilizar consultas parametrizadas *, aunque el asker ha descartado eso. –

+0

@Hank Gay: de acuerdo, pero de las dos, mysql_real_escape_string es orientable, –

0

mysql_real_escape_string se debe utilizar cuando se reciben datos binarios, addslashes es para la entrada de texto.

Puede ver las diferencias aquí: mysql-real-escape-string y addslashes

6

mysql_real_escape_string() tiene el beneficio añadido de escape de entrada de texto correctamente con respecto al conjunto de caracteres de una base de datos a través del parámetro opcional id_enlace.

El reconocimiento del conjunto de caracteres es una distinción fundamental. addslashes() agregará una barra antes de cada representación binaria de ocho bits de cada carácter que se escapará.

Si está utilizando algún tipo de conjunto de caracteres multibyte es posible, aunque probablemente solo por un diseño deficiente del juego de caracteres, que una o ambas mitades de una representación de caracteres de dieciséis o treinta y dos bits sea idéntica a los ocho bits de un carácter addslashes() agregaría una barra inclinada a.

En tales casos, es posible que se agregue una barra antes de un carácter que no se debe escapar o, peor aún, puede obtener una barra en medio de un carácter de dieciséis (o treinta y dos) que corrompería los datos .

Si necesita escapar del contenido de las consultas de la base de datos, siempre debe usar mysql_real_escape_string() siempre que sea posible. addslashes() está bien si está seguro de que la base de datos o la tabla solo está utilizando la codificación ASCII de 7 u 8 bits.

caso
1

1:

$str = "input's data"; 

print mysql_real_escape_string($str);  input\'s data 

print addslashes($str);     input\'s data; 

el caso 2:

$str = "input\'s data"; 

print mysql_real_escape_string($str);  input\'s data 

print addslashes($str);     input\\'s data; 
Cuestiones relacionadas