В чем разница между mysql_real_escape_string и addlashes? - PullRequest
9 голосов
/ 18 сентября 2008

mysql_real_escape_string и addslashes оба используются для экранирования данных перед запросом базы данных, так в чем же разница? (Этот вопрос не о параметризованных запросах / PDO / mysqli)

Ответы [ 5 ]

15 голосов
/ 18 сентября 2008

string mysql_real_escape_string ( string $unescaped_string [, resource $link_identifier ] )
mysql_real_escape_string() вызывает библиотечную функцию MySQL mysql_real_escape_string, которая добавляет обратную косую черту к следующим символам: \ x00, \ n, \ r, \, ', "и \ x1a.

string addslashes ( string $str )
Возвращает строку с обратной косой чертой перед символами, которые необходимо заключить в кавычки в запросах к базе данных и т. Д. Это символы одинарных кавычек ('), двойных кавычек ("), обратной косой черты (\) и NUL (байт NULL).

Они влияют на разных персонажей. mysql_real_escape_string является специфическим для MySQL. Addslashes - это просто общая функция, которая может применяться к другим вещам, а также к MySQL.

8 голосов
/ 18 сентября 2008

mysql_real_escape_string() имеет дополнительное преимущество, заключающееся в правильном экранировании ввода текста относительно набора символов базы данных через необязательный параметр link_identifier .

Осознание набора символов является критическим отличием. addslashes() добавит косую черту перед каждым восьмибитным двоичным представлением каждого символа, который должен быть экранирован.

Если вы используете какую-либо форму многобайтового набора символов, возможно, хотя, вероятно, только из-за плохой конструкции набора символов, одна или обе половины шестнадцатых или тридцати двухбитных представлений символов идентичны восьми битам символ addslashes() добавит косую черту к.

В таких случаях вы можете добавить косую черту перед символом, который не должен быть экранирован, или, что еще хуже, вы можете получить косую черту в середине шестнадцати (или тридцати двух) битных символов, что повредит данные.

Если вам нужно экранировать контент в запросах к базе данных, вы всегда должны использовать mysql_real_escape_string(), где это возможно. addslashes() хорошо, если вы уверены, что база данных или таблица используют только 7 или 8-битную кодировку ASCII.

1 голос
/ 08 марта 2013

дело 1:

$str = "input's data";

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

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

дело 2:

$str = "input\'s data";

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

print addslashes($str);                    input\\'s data;
0 голосов
/ 18 сентября 2008

mysql_real_escape_string следует использовать при получении двоичных данных, addslashes для ввода текста.

Здесь вы можете увидеть отличия: mysql-real-escape-string и addlashes

0 голосов
/ 18 сентября 2008

Кажется, что mysql_real_escape_string является бинарно-безопасным - документация гласит:

Если необходимо вставить двоичные данные, эту функцию необходимо использовать.

Я думаю, что, вероятно, всегда безопаснее использовать mysql_real_escape_string, чем аддлэш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...