mysql_real_escape_string
(PHP 4 >= 4.3.0, PHP 5)
mysql_real_escape_string — Екран спеціальних символів у рядках для використання у виразах SQL
Увага
Цей модуль застарів, починаючи з версії PHP 5.5.0, і видалений у PHP 7.0.0. Використовуйте замість нього MySQLi або PDO_MySQLСмотрите также инструкциюMySQL: вибір API. Альтернативи для цієї функції:
Опис
mysql_real_escape_string(string $unescaped_string, resource $link_identifier = NULL): string
Екранує спеціальні символи в unescaped_string
, беручи до уваги кодування з'єднання, таким чином, що результат можна безпечно використовувати в SQL-запиті у функції mysql_query(). Якщо вставляються бінарні дані, то до них необхідно застосовувати цю функцію.
mysql_real_escape_string() викликає бібліотечну функцію MySQL mysql_real_escape_string, яка додає зворотну косу рису до наступних символів: \x00
\n
\r
\
'
"
и\x1a
Ця функція повинна завжди (за декількома винятками) використовуватися для того, щоб убезпечити дані, що вставляють у запит перед відправкою його до MySQL.
Застереження
Безпека: кодування символів за промовчанням
Кодування символів має встановлюватися як на сервері, так і за допомогою функції mysql_set_charset(), щоб впливати на поведінку mysql_real_escape_string(). Докладніше описано в розділі кодування символів
Список параметрів
unescaped_string
Рядок, що екранується.
link_identifier
З'єднання MySQL. Якщо ідентифікатор з'єднання не вказано, буде використано останнє з'єднання, відкрите mysql_connect(). Якщо таке з'єднання не було знайдено, функція спробує створити таке, якби mysql_connect() було викликано без параметрів. Якщо з'єднання не було знайдено та не змогло бути створено, генерується помилка рівня E_WARNING
Значення, що повертаються
Повертає рядок, де екрановані всі необхідні символи, або **false
**в случае возникновения ошибки.
Помилки
Запуск цієї функції без існуючого з'єднання з MySQL викликає помилку рівня E_WARNING
. Цю функцію можна запускати лише якщо є з'єднання з MySQL.
Приклади
Приклад #1 Простий приклад використання mysql_real_escape_string()
Loading...
Приклад #2 Приклад використання mysql_real_escape_string()** без наявності з'єднання**
Цей приклад показує, що станеться, якщо викликати цю функцію без з'єднання з MySQL.
Loading...
Висновок наведеного прикладу буде схожим на:
Warning: mysql_real_escape_string(): No such file or directory in /this/test/script.php on line 5
Warning: mysql_real_escape_string(): A link to the server could not be established in /this/test/script.php on line 5
bool(false)
string(41) "SELECT * FROM actors WHERE last_name = ''"
Приклад #3 Приклад злому з використанням ін'єкції SQL.
Loading...
Запит, який буде надіслано MySQL:
SELECT * FROM users WHERE user='aidan' AND password='' OR ''=''
Це дозволить будь-кому увійти в систему без пароля.
Примітки
Зауваження :
Функциюmysql_real_escape_string() можна використовувати тільки після встановлення з'єднання з MySQL. В іншому випадку виникне помилка рівня
E_WARNING
, а функція повернеfalse
. Якщоlink_identifier
не вказано, використовується останнє відкрите з'єднання.
Зауваження :
Якщо не користуватися цією функцією, то запит стає вразливим для злому за допомогою SQL-ін'єкцій
Зауваження mysql_real_escape_string() не екранує символи
%
и_
. Ці символи є масками груп символів в операторах MySQLLIKE
GRANT
иREVOKE
Дивіться також
- mysql_set_charset() - Встановлює кодування клієнта
- mysql_client_encoding() - Повертає кодування з'єднання