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() - Закрывает подготовленный запрос