mysql_escape_string VS mysql_real_escape_string - PullRequest
53 голосов
/ 08 сентября 2010

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

Я знаю, что mysql_escape_string устарела с 5.3, но какова была реальная разница в mysql_real_escape_string.

То, что я думал, было то, что mysql_real_escape_string - это то же самое, что mysql_escape_string, кроме mysql_real_escape_string принимает второй аргумент для ресурса mysql.

, так что тогда я хорошо подумалДолжно быть некоторое различие в том, как обрабатываются строки, потому что не было бы необходимости в 2 функциях.

Итак, я подумал, что разница заключается исключительно в локали и кодировках символов.?

Кто-нибудь может мне это объяснить?

Ответы [ 4 ]

87 голосов
/ 08 сентября 2010

Разница в том, что mysql_escape_string просто обрабатывает строку как необработанные байты и добавляет экранирование там, где считает нужным.

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

Однако вместо экранирования лучше использовать параметризованные запросы из библиотеки MySQLi;ранее были ошибки в подпрограмме побега, и возможно, что некоторые могут появиться снова.Параметризовать запрос намного сложнее, так что менее вероятно, что вы можете быть скомпрометированы ошибкой MySQL.

3 голосов
/ 29 августа 2011

mysql_escape_string не считается устаревшим с 5.3, но для 4.3.0 и выше. Поэтому любой, использующий версию PHP выше / или 4.3.0, должен использовать mysql_real_escape_string.

при использовании php < 4.3.0, чем сделать magic_quotes_gpc active из php.ini, хотя рекомендуется обновить, но если ваш код будет иметь проблемы, чем убедиться, что вы используете, функции magic_quotes_gpc и addslash вместо mysql_escape_string.

3 голосов
/ 08 сентября 2010

Ну ... вроде, да. Он принимает во внимание набор символов соединения MySQL.

http://php.net/mysql_escape_string

Эта функция идентична mysql_real_escape_string() за исключением того, что mysql_real_escape_string() принимает обработчик соединения и экранирует строку в соответствии с текущим набором символов. mysql_escape_string() не принимает аргумент подключения и не учитывает текущую настройку кодировки.

1 голос
/ 26 июня 2013

теперь обе эти функции устарели в

PHP 4> = 4.3.0 и PHP 5. Они рекомендуют использовать PDO_MySQL расширение

...