Подготовка SQL запроса к выполнению


mysqli_stmt_prepare

(PHP 5)

mysqli_stmt::prepare -- mysqli_stmt_prepare Подготовка SQL запроса к выполнению

Описание

Объектно-ориентированный стиль

mixed mysqli_stmt::prepare ( string $query )

Процедурный стиль

bool mysqli_stmt_prepare ( mysqli_stmt $stmt , string $query )

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