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.

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

http://php.net/mysql_escape_string

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

Ответ 4

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

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