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() не екранує символи %и_. Ці символи є масками груп символів в операторах MySQL LIKE GRANTиREVOKE

Дивіться також