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