mysql_real_escape_string
и addslashes
используются для mysql_real_escape_string
данных перед запросом базы данных, так что в чем разница? (Этот вопрос не связан с параметризованными запросами / PDO / mysqli)
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.
mysql_real_escape_string()
имеет дополнительное преимущество для правильного ввода текста в соответствии с набором символов базы данных через необязательный параметр link_identifier .
Знание набора символов является критическим различием. addslashes()
добавит косую черту перед каждым восьмибитным двоичным представлением каждого символа, который должен быть экранирован.
Если вы используете какую-то форму набора многобайтовых символов, это возможно, хотя, вероятно, только при плохом дизайне набора символов одна или обе половины из шестнадцати или тридцати двух бит символьного представления идентичны восьми битам символа addslashes()
добавит косую черту.
В таких случаях вы можете получить косую черту, добавленную перед символом, который не должен быть экранирован или, что еще хуже, вы можете получить косую черту в середине шестнадцати (или тридцати двух) бит символов, которые могут испортить данные.
Если вам нужно избегать содержимого в запросах базы данных, вы всегда должны использовать mysql_real_escape_string()
где это возможно. addslashes()
отлично, если вы уверены, что база данных или таблица использует только кодировку ASCII 7 или 8 бит.
Дело 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;
Кажется, что mysql_real_escape_string
двоично-безопасный – в документации указано:
Если необходимо вставить двоичные данные, эту функцию необходимо использовать.
Я думаю, что безопаснее всегда использовать mysql_real_escape_string
чем mysql_real_escape_string
.
mysql_real_escape_string
следует использовать, когда вы получаете двоичные данные, addslashes
– для ввода текста.
Здесь вы можете увидеть различия: mysql-real-escape-string и addslashes