mysql_real_escape_string VS добавляет

Может кто-то пролить свет на различия между этими двумя функциями, из руководства PHP

addslashes: Возвращает строку с обратными косыми чертами перед символами, которые должны быть указаны в запросах базы данных и т. д. Эти символы представляют собой одинарные кавычки ('), двойную кавычку («), обратную косую черту () и NUL (байт NULL).

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

из того, что я собираю, основное различие – \ x00, \ n \ r \ x1a, которое добавляет, не ускользнуло, можете ли вы сказать мне, каково значение этого?

благодаря

Related of "mysql_real_escape_string VS добавляет"

То, что вы цитируете, вероятно, из документа, но, насколько я знаю, это не обязательно так.

addslashes добавляет косые черты персонажам, которые обычно беспокоят. mysql_real_escape_string избегает того, что нужно избежать MySQL. Это может быть больше или меньше символов, чем то, что заботится о том, что addslashes .

Кроме того, mysql_real_escape_string не обязательно будет добавлять косые черты для выхода. Хотя я думаю, что это работает, если вы сделаете это так, последние версии escape-кодов MySQL вытесняете два из них вместе, а не помещая перед ним косую черту.

Я считаю, что вы всегда должны использовать функцию escape-функции вашего провайдера данных вместо addslashes , потому что addslashes может делать слишком много или недостаточно работать для цели, которую вы используете. С другой стороны, mysql_real_escape_string знает, что делать, чтобы подготовить строку для вставки ее в запрос. Даже если спецификации меняются о том, как избежать лишних вещей, и вдруг это не обратная косая черта, которую вы должны использовать больше, ваш код все равно будет работать, потому что mysql_real_escape_string будет знать об этом.

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

Функция PHP mysql_real_escape_string () использует функцию API MySQL C с тем же именем: http://dev.mysql.com/doc/refman/5.1/en/mysql-real-escape-string.html

Также читайте addlashes () в сравнении с mysql_real_escape_string () отмеченным экспертом по безопасности PHP Крисом Шифлеттом, за демонстрацию того, что вы можете использовать эксплойты SQL-инъекций, даже если вы используете addlashes ().


Другие люди рекомендуют использовать параметры запроса, а затем вам не нужно выполнять экранирование динамических значений. Я тоже рекомендую это сделать, но в PHP вам придется переключиться на PDO или ext / mysqli, потому что простой ext / mysql API не поддерживает параметры запроса.

Также могут быть некоторые угловые случаи, когда вы не можете использовать параметры запроса для динамического значения строки, например, ваш шаблон поиска в полнотекстовом поиске.

Был куча истории с mysql_escape_string и mysql_real_escape_string . Они оба пытались создать «общий» механизм экранирования, который минимизировал бы вероятность атаки SQL-инъекций.

mysql_real_escape_string и mysql_real_escape_string в порядке, если они вам нужны, но они, вероятно, нет.

Как говорит @afrazier, вы должны использовать подготовленные заявления

Вместо того чтобы готовить запросы с использованием PDO, вы можете использовать это, в то время как ваше приложение использует MySQLi (остерегайтесь! "I" at и of Mysql ")

 $nick = $connect->real_escape_string($nick); $nick= addcslashes($nick, '%_'); $pass = $connect->real_escape_string($pass); $pass = addcslashes($pass, '%_'); 

Игнорируйте оба и просто используйте параметризованные запросы. Если, конечно, вам не нравятся инъекции.