PHP MySQL Подготовленные запросы
Подготовленные запросы очень полезны для предотвращения MySQL-инъекций.
Подготовленные выражения и связанные параметры
Подготовленные выражения используются для выполнения нескольких идентичных SQL-запросов, и они выполняются более эффективно.
Принцип работы подготовленных выражений следующий:
Подготовка: создайте шаблон SQL-запроса и отправьте его в базу данных. Зарезервированные значения помечаются параметром "?". Например:
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
База данных разбирает, компилирует и выполняет оптимизацию запроса для шаблона SQL-запроса, а затем сохраняет результат, не выводя его.
Выполнение: Наконец, связанные приложением значения передаются параметрам (меткам "?"), и база данных выполняет выражение. Приложение может выполнять выражение несколько раз, если значения параметров различаются.
По сравнению с прямым выполнением SQL-запросов подготовленные выражения имеют два основных преимущества:
Подготовленные выражения значительно сокращают время анализа, так как запрос анализируется только один раз (хотя выражение выполняется несколько раз).
-
Связанные параметры уменьшают нагрузку на пропускную способность сервера; нужно отправлять только параметры запроса, а не всё выражение.
-
Подготовленные выражения очень полезны для защиты от SQL-инъекций, поскольку значения параметров отправляются с использованием другого протокола, что гарантирует корректность данных.
Подготовленные выражения MySQLi
В следующем примере используются подготовленные выражения в MySQLi и связываются соответствующие параметры:
Пример (MySQLi с использованием подготовленных выражений)
Проанализируйте каждую строку кода в следующем примере:
В SQL-запросе мы использовали вопросительные знаки (?), где можно заменить вопросительные знаки целыми числами, строками, числами с плавающей запятой двойной точности и логическими значениями.
Теперь давайте рассмотрим функцию bind_param():
Эта функция привязывает параметры SQL-запроса и сообщает базе данных значения параметров. Список параметров "sss" обрабатывает типы данных остальных параметров. Символ "s" сообщает базе данных, что параметр является строкой.
Параметры имеют следующие четыре типа:
- i - целое число
- d - double
- s - строка
- b - BLOB (большой двоичный объект)
Для каждого параметра необходимо указать тип.
Сообщая базе данных тип данных параметров, можно снизить риск SQL-инъекции.
![]() |
Примечание:Если вы хотите вставить другие данные (ввод пользователя), проверка данных очень важна. |
|---|
Подготовленные запросы в PDO
В следующем примере мы используем подготовленные запросы в PDO и привязываем параметры:
