it-swarm.com.ru

mysql_escape_string VS mysql_real_escape_string

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

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

Я думал, что mysql_real_escape_string точно такой же, как mysql_escape_string, за исключением mysql_real_escape_string, который принимает второй аргумент для ресурса mysql.

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

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

кто-нибудь может прояснить это для меня?

53
RobertPitt

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

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

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

87
Michael Madsen

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
Rocky Sharma

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

http://php.net/mysql_escape_string

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

3
deceze

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

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

1
Jeff_Alieffson