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






Кажется, что mysql_real_escape_string безопасен для двоичного кода - в документации указано:
If binary data is to be inserted, this function must be used.
Я думаю, что, наверное, безопаснее всегда использовать mysql_real_escape_string, чем добавлять слэши.
Я думаю, что, наверное, безопаснее использовать параметризованные запросы, хотя спрашивающий исключил это.
@Hank Gay: согласен, но из двух mysql_real_escape_string можно использовать,
string mysql_real_escape_string ( string $unescaped_string [, resource $link_identifier ] )mysql_real_escape_string()calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a.
string addslashes ( string $str )
Returns a string with backslashes before characters that need to be quoted in database queries etc. These characters are single quote ('), double quote ("), backslash (\) and NUL (the NULL byte).
Они влияют на разных персонажей. mysql_real_escape_string специфичен для MySQL. Добавление слэшей - это просто общая функция, которая может применяться не только к MySQL, но и к другим вещам.
Вы просто скопировали определения и не ответили на вопрос, в чем на самом деле разница, то есть в чем заключаются обычаи и в чем заключаются подводные камни, в чем одна функция лучше, чем другая. Лучший ответ здесь: stackoverflow.com/a/3473077/1335996
Прочтите еще раз, и вы обратите внимание на последний абзац, где я сказал, что затронуты разные символы, в котором резюмируется процитированная документация. Вы увидите, что на вопрос был дан ответ. Вопрос не касался «почему один лучше другого» или «преимущества и недостатки». Связанный ответ является более глубоким, и если его стоит прочитать, если вышеизложенное вам все еще непонятно, но я не вижу, что необходимо пытаться найти дыры в моем ответе.
mysql_real_escape_string следует использовать при получении двоичных данных, addslashes - для ввода текста.
Вы можете увидеть различия здесь: mysql-реальная-escape-строка и добавляет слэши
mysql_real_escape_string() имеет дополнительное преимущество, заключающееся в правильном экранировании ввода текста по отношению к набору символов базы данных с помощью необязательного параметра link_identifier.
Осведомленность о наборе символов - важное различие. addslashes() будет добавлять косую черту перед каждым восьмибитным двоичным представлением каждого символа, который нужно экранировать.
Если вы используете какую-либо форму многобайтового набора символов, возможно, хотя, вероятно, только из-за плохой конструкции набора символов, что одна или обе половины шестнадцати- или тридцатидвухбитного представления символа идентичны восьми битам символа addslashes(). добавит косую черту к.
В таких случаях вы можете добавить косую черту перед символом, который не следует экранировать, или, что еще хуже, вы можете получить косую черту в середине шестнадцати (или 32-битного) символа, что приведет к повреждению данных.
Если вам нужно экранировать контент в запросах к базе данных, вы всегда должны использовать mysql_real_escape_string(), где это возможно. addslashes() подходит, если вы уверены, что база данных или таблица использует только 7- или 8-битную кодировку ASCII.
Случай 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;
Подобно этому вопросу: stackoverflow.com/questions/534742/…