(PHP 5, PHP 7, PHP 8)
mysqli_stmt::prepare -- mysqli_stmt_prepare — Подготавливает утверждение SQL к выполнению
Объектно-ориентированный стиль
Процедурный стиль
Подготавливает утверждение к выполнению. Запрос должен состоять из одного оператора SQL.
Шаблон утверждения может содержать ноль или несколько вопросительных знаков
(?), меток параметров, также называемых заполнителями.
Метки параметров должны быть привязаны к переменным приложения с помощью
mysqli_stmt_bind_param() перед выполнением утверждения.
строк.
Замечание:
В случае, если длина выражения, которое передаётся в mysqli_stmt_prepare(), больше, чем
max_allowed_packetсервера, возвращаемые коды ошибки могут различаться в зависимости от используемого драйвера. А это может быть либо родной MySQL-драйвер (mysqlnd), либо клиентская библиотека MySQL (libmysqlclient). Поведение функции будет следующим:
mysqlndна платформе Linux возвращает код ошибки 1153. Сообщение об ошибке означаетразмер пакета превышает.max_allowed_packetбайт
mysqlndна платформе Windows возвращает код ошибки 2006. Это сообщение об ошибке означаетсервер недоступен.
libmysqlclientна всех платформах возвращает код ошибки 2006. Это сообщение об ошибке означаетсервер недоступен.
stmtqueryТекст запроса в виде строки. Запрос должен состоять из одного SQL-выражения.
Утверждение SQL может содержать ноль или более меток параметров,
представленных знаками вопроса (?)
в соответствующих позициях.
Замечание:
Метки параметров запроса можно встраивать только в определённые места в выражении. Например, они допустимы в списке
VALUES()выраженияINSERT(чтобы задать значения столбцов для строки), или в операциях сравнения предложенияWHEREдля задания сравниваемого значения. Однако, эти метки недопустимы в качестве идентификаторов (таких как имена столбцов или таблиц).
Функция возвращает true, если выполнилась успешно, или false, если возникла ошибка.
Если уведомления об ошибках mysqli включены (MYSQLI_REPORT_ERROR) и запрошенная операция не удалась,
выдаётся предупреждение. Если, кроме того, установлен режим MYSQLI_REPORT_STRICT,
вместо этого будет выброшено исключение mysqli_sql_exception.
Пример #1 Пример использования mysqli_stmt::prepare()
Объектно-ориентированный стиль
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$city = "Amersfoort";
/* Создаём подготовленное утверждение */
$stmt = $mysqli->stmt_init();
$stmt->prepare("SELECT District FROM City WHERE Name=?");
/* Связываем переменные с метками */
$stmt->bind_param("s", $city);
/* Выполняем запрос */
$stmt->execute();
/* Связываем переменные результата */
$stmt->bind_result($district);
/* Получаем значение */
$stmt->fetch();
printf("%s находится в районе %s\n", $city, $district);Процедурный стиль
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
$city = "Amersfoort";
/* Создаём подготовленное утверждение */
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "SELECT District FROM City WHERE Name=?");
/* Связываем переменные с метками */
mysqli_stmt_bind_param($stmt, "s", $city);
/* Выполняем запрос */
mysqli_stmt_execute($stmt);
/* Связываем переменные результата */
mysqli_stmt_bind_result($stmt, $district);
/* Получаем значение */
mysqli_stmt_fetch($stmt);
printf("%s находится в районе %s\n", $city, $district);Результат выполнения приведённых примеров:
Amersfoort находится в районе Utrecht