Подготовленные операторы очень полезны для предотвращения внедрения MySQL.
Подготовленные операторы используются для более эффективного выполнения нескольких идентичных операторов SQL.
Подготовленные операторы работают следующим образом:
Предварительная обработка: создание шаблонов операторов SQL и отправка их в базу данных. Зарезервированные значения отмечены параметром «?». Например:
ВСТАВИТЬ В MyGuests (имя, фамилия, адрес электронной почты) ЗНАЧЕНИЯ (?, ?, ?)
Анализ базы данных, компиляция, оптимизация запросов по шаблонам операторов SQL и сохранение результатов без вывода.
Выполнение: Наконец, значение, привязанное к приложению, передается параметру («?»), и база данных выполняет оператор. Приложение может выполнить оператор несколько раз, если значения параметров разные.
По сравнению с непосредственным выполнением операторов SQL подготовленные операторы имеют два основных преимущества:
Подготовленные операторы значительно сокращают время анализа, поскольку выполняется только один запрос (хотя оператор выполняется несколько раз).
Привязка параметров снижает пропускную способность сервера, вам нужно отправлять только параметры запроса, а не весь оператор.
Подготовленные операторы очень полезны для SQL-инъекций, поскольку после отправки значений параметров используются разные протоколы, что обеспечивает достоверность данных.
В следующем примере используются подготовленные операторы MySQLi и привязываются соответствующие параметры:
Проанализируйте каждую строку кода для следующего примера:
«ВСТАВИТЬ В MyGuests (имя, фамилия, адрес электронной почты) ЗНАЧЕНИЯ (?, ?, ?)»В операторе SQL мы используем вопросительный знак (?), здесь мы можем заменить вопросительный знак целым числом, строкой, плавающей запятой двойной точности и логическим значением.
Далее давайте взглянем на функциюbind_param():
$stmt->bind_param("sss", $firstname, $lastname, $email);Эта функция связывает параметры SQL и сообщает базе данных значения параметров. Столбец параметра «sss» обрабатывает типы данных остальных параметров. Символ s сообщает базе данных, что параметр является строкой.
Существует четыре типа параметров:
i - целое число (целочисленный тип)
d - double (тип двойной точности с плавающей запятой)
s - строка
б — BLOB (большой двоичный объект: большой двоичный объект)
Для каждого параметра требуется указанный тип.
Сообщив базе данных тип данных параметра, вы можете снизить риск SQL-инъекции.
![]() | Примечание. Если вы хотите вставить другие данные (пользовательский ввод), проверка данных очень важна. |
---|
В следующем примере мы используем подготовленные операторы и параметры привязки в PDO: