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

# mysqli_stmt::prepare

# mysqli_stmt_prepare

(PHP 5, PHP 7, PHP 8)

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

### Описание

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

public function mysqli_stmt::prepare(string `$query`): bool

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

function mysqli_stmt_prepare(mysqli_stmt `$statement`, string `$query`): bool

Подготавливает утверждение к выполнению. Запрос должен состоять из одного оператора 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. Это сообщение об ошибке означает сервер недоступен.

### Список параметров

`stmt`
  Только для процедурного стиля: объект mysqli_stmt, который вернула функция mysqli_stmt_init().
`query`

  Текст запроса в виде строки. Запрос должен состоять из одного 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

### Смотрите также

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

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open