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.

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

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

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

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

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

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

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 .

Ну … вроде, да. Он учитывает набор символов MySQL.

http://php.net/mysql_escape_string

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

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

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