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.
так что тогда я подумал, что должно быть какое-то различие в том, как обрабатываются строки, потому что не было бы необходимости в двух функциях.
И тогда я подумал, что разница заключается исключительно в локали и кодировках символов.?
Кто-нибудь может прояснить это для меня?
4 ответа
Разница в том, что mysql_escape_string
просто обрабатывает строку как необработанные байты и добавляет экранирование там, где считает, что это уместно.
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_escape_string()
не принимает аргумент подключения и не учитывает текущую настройку набора символов.
Теперь обе эти функции устарели в
PHP 4 >= 4.3.0 и PHP 5. Они рекомендуют использовать
PDO_MySQL
расширение