(PHP 5, PHP 7, PHP 8)
mysqli::prepare -- mysqli_prepare — Подготавливает SQL выражение к выполнению
Объектно-ориентированный стиль
Процедурный стиль
Подготавливает SQL-запрос и возвращает указатель на это выражение, который может использоваться для дальнейших операций с этим выражением. Запрос должен состоять из одного SQL-выражения.
Шаблон оператора может содержать ноль или несколько вопросительных знаков
(?
), меток параметров, также называемых заполнителями.
Метки параметров должны быть привязаны к переменным приложения с помощью mysqli_stmt_bind_param()
перед выполнением выражения.
mysql
Только для процедурного стиля: объект mysqli, полученный с помощью mysqli_connect() или mysqli_init().
query
Текст запроса в виде строки. Должен состоять из одного SQL-выражения.
Выражение SQL может содержать ноль или более меток параметров,
представленных знаками вопроса (?
)
в соответствующих позициях.
Замечание:
Эти метки можно встраивать только в определённые места в выражении. Например, они разрешены в списке
VALUES()
выраженияINSERT
(чтобы задать значения столбцов для строки), или в операциях сравнения предложенияWHERE
для задания сравниваемого значения. Однако они не разрешены в качестве идентификаторов (таких как имена таблиц или столбцов).
mysqli_prepare() возвращает объект запроса или false
в
случае ошибки.
Если уведомления об ошибках mysqli включены (MYSQLI_REPORT_ERROR
) и запрошенная операция не удалась,
выдаётся предупреждение. Если, кроме того, установлен режим MYSQLI_REPORT_STRICT
,
вместо этого будет выброшено исключение mysqli_sql_exception.
Пример #1 Пример использования mysqli::prepare()
Объектно-ориентированный стиль
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$city = "Amersfoort";
/* создание подготавливаемого запроса */
$stmt = $mysqli->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_prepare($link, "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