mysqli_stmt::prepare
mysqli_stmt_prepare
(PHP 5, PHP 7)
mysqli_stmt::prepare -- mysqli_stmt_prepare — Подготовка SQL-запроса к выполнению
Описание
Объектно-ориентированный стиль
Процедурный стиль
Подготавливает SQL-запрос, переданный в виде строки с завершающим нулем.
Метки параметров должны быть связаны с переменными приложения функциями mysqli_stmt_bind_param() и/или mysqli_stmt_bind_result() до запуска запроса или выборки строк.
Замечание:
В случае, если длина выражения, которое вы передаете в mysqli_stmt_prepare(), больше, чем
max_allowed_packet
сервера, возвращаемые коды ошибки могут различаться в зависимости от используемого драйвера. А это может быть либо родной MySQL-драйвер (mysqlnd
), либо клиентская библиотека MySQL (libmysqlclient
). Поведение функции будет следующим:
mysqlnd
на платформе Linux возвращает код ошибки 1153. Сообщение об ошибке означаетразмер пакета превышает.max_allowed_packet
байт
mysqlnd
на платформе Windows возвращает код ошибки 2006. Это сообщение об ошибке означаетсервер недоступен.
libmysqlclient
на всех платформах возвращает код ошибки 2006. Это сообщение об ошибке означаетсервер недоступен.
Список параметров
-
stmt
-
Только для процедурного стиля: Идентификатор выражения, полученный с помощью mysqli_stmt_init().
-
query
-
Текст запроса в виде строки. Запрос должен состоять из одного SQL-выражения.
Запрос может содержать одну или несколько меток параметров SQL-запроса. Эти метки можно добавить путем встраивания знаков вопроса (
?
) в места выражения, где требуется подставлять параметры.Замечание:
Нет необходимости в завершающей точке с запятой или символе
\g
в конце выражения.Замечание:
Метки параметров запроса можно встраивать только в определенные места в выражении. Например, они допустимы в списке VALUES() выражения INSERT (чтобы задать значения столбцов для строки), или в операциях сравнения предложения WHERE для задания сравниваемого значения.
Однако, эти метки недопустимы в качестве идентификаторов (таких как имена столбцов или таблиц), а также в списке псевдонимов столбцов предложения SELECT. Нельзя также использовать параметры для задания обоих операндов бинарного оператора (например, знак равенства
=
). Последнее ограничение необходимо, так как в противном случае невозможно будет определить тип операндов. В основном, параметры допустимы в выражениях языка манипулирования данными (DML), и недопустимы в выражениях языка определения данных (DDL).
Возвращаемые значения
Возвращает true
в случае успешного завершения или false
в случае возникновения ошибки.
Примеры
Пример #1 Объектно-ориентированный стиль
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* Проверяем соединение */
if (mysqli_connect_errno()) {
printf("Не удалось подключиться: %s\n", mysqli_connect_error());
exit();
}
$city = "Amersfoort";
/* создаем подготавливаемый запрос */
$stmt = $mysqli->stmt_init();
if ($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);
/* закрываем запрос */
$stmt->close();
}
/* закрываем соединение */
$mysqli->close();
?>
Пример #2 Процедурный стиль
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* Проверяем соединение */
if (mysqli_connect_errno()) {
printf("Не удалось подключиться: %s\n", mysqli_connect_error());
exit();
}
$city = "Amersfoort";
/* создаем подготавливаемый запрос */
$stmt = mysqli_stmt_init($link);
if (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);
/* закрываем запрос */
mysqli_stmt_close($stmt);
}
/* закрываем соединение */
mysqli_close($link);
?>
Результат выполнения данных примеров:
Amersfoort находится в округе Utrecht
Смотрите также
- mysqli_stmt_init() - Инициализирует запрос и возвращает объект для использования в mysqli_stmt_prepare
- mysqli_stmt_execute() - Выполняет подготовленный запрос
- mysqli_stmt_fetch() - Связывает результаты подготовленного выражения с переменными
- mysqli_stmt_bind_param() - Привязка переменных к параметрам подготавливаемого запроса
- mysqli_stmt_bind_result() - Привязка переменных к подготовленному запросу для размещения результата
- mysqli_stmt_get_result() - Получает результат из подготовленного запроса
- mysqli_stmt_close() - Закрывает подготовленный запрос