Выполняет подготовленный запрос

# PDOStatement::execute

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)

PDOStatement::execute — Выполняет подготовленный запрос

### Описание

public function PDOStatement::execute(?array `$params` = `null`): bool

Метод запускает подготовленный запрос. Если подготовленный запрос включает маркеры параметров, или заполнители, требуется:

- Вызвать метод PDOStatement::bindParam(), чтобы связать маркеры с переменными, или метод PDOStatement::bindValue(), чтобы связать маркеры со значениями. Переменные, которые связали с маркерами, передают свои значения как входные данные метода и получают значения вывода, если метод заполняет переменные аргументов значениями вывода. При возврате значений вывода метод присваивает переменным, которые передали по ссылке, значения параметров, с которым связали маркеры.

- или передать массив значений параметров, которые метод только примет как входные значения и не будет заполнять значениями вывода.

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

`params`

  Массив значений, в котором количество элементов совпадает с количеством связанных параметров в SQL-запросе, который выполняет метод. Метод обрабатывает каждое значение массива как значение с типом `PDO::PARAM_STR`.

  Нельзя привязать несколько значений к одному параметру; например, нельзя привязать два значения к именованному параметру в условии IN().

  Невозможно привязать больше значений, чем указали в запросе; метод не выполнит запрос и вызовет ошибку, если массив `params` содержит больше ключей, чем указали при подготовке SQL-запроса методом PDO::prepare().

### Возвращаемые значения

Функция возвращает `true`, если выполнилась успешно, или `false`, если возникла ошибка.

### Ошибки

Метод выдаёт ошибку уровня `E_WARNING`, если для атрибута `PDO::ATTR_ERRMODE` установили режим `PDO::ERRMODE_WARNING`.

Метод выбрасывает исключение PDOException, если для атрибута `PDO::ATTR_ERRMODE` установили режим `PDO::ERRMODE_EXCEPTION`.

### Примеры

Пример #1 Пример выполнения подготовленного запроса с привязкой переменных и значений

    <?php

    /* Выполнение подготовленного запроса с привязкой переменных и значений */
    $calories = 150;
    $colour = 'gre';

    $sth = $dbh->prepare(
        'SELECT name, colour, calories
        FROM fruit
        WHERE calories < :calories AND colour LIKE :colour'
    );

    $sth->bindParam('calories', $calories, PDO::PARAM_INT);

    /* Именам разрешают начинаться с двоеточия ":" */
    $sth->bindValue(':colour', "%$colour%");

    $sth->execute();

    ?>

Пример #2 Пример выполнения подготовленного запроса с массивом именованных значений

    <?php

    /* Выполнение подготовленного запроса с передачей массива входных значений */
    $calories = 150;
    $colour = 'red';

    $sth = $dbh->prepare(
        'SELECT name, colour, calories
        FROM fruit
        WHERE calories < :calories AND colour = :colour'
    );

    $sth->execute(array('calories' => $calories, 'colour' => $colour));

    /* Ключи массива также разрешают начинать с двоеточия ":" */
    $sth->execute(array(':calories' => $calories, ':colour' => $colour));

    ?>

Пример #3 Пример выполнения подготовленного запроса с массивом позиционных значений

    <?php

    /* Выполнение подготовленного запроса с передачей массива входных значений */
    $calories = 150;
    $colour = 'red';

    $sth = $dbh->prepare(
        'SELECT name, colour, calories
        FROM fruit
        WHERE calories < ? AND colour = ?'
    );

    $sth->execute(array($calories, $colour));

    ?>

Пример #4 Пример выполнения подготовленного запроса с переменными, которые привязали к позиционным заполнителям

    <?php

    /* Выполнение подготовленного запроса с привязкой PHP переменных */
    $calories = 150;
    $colour = 'red';

    $sth = $dbh->prepare(
        'SELECT name, colour, calories
        FROM fruit
        WHERE calories < ? AND colour = ?'
    );

    $sth->bindParam(1, $calories, PDO::PARAM_INT);
    $sth->bindParam(2, $colour, PDO::PARAM_STR, 12);

    $sth->execute();

    ?>

Пример #5 Пример выполнения подготовленного запроса с массивом для условия IN

    <?php

    /* Выполнение подготовленного запроса с массивом для условия IN */
    $params = array(1, 21, 63, 171);

    /* Создаём строку из знаков вопроса (?) в количестве, равном количеству параметров */
    $place_holders = '?' . str_repeat(', ?', count($params) - 1);

    /**
     * Пример подготавливает запрос с неименованными заполнителями (?),
     * количество которых совпадает с количеством значений в массиве $params. При выполнении
     * запроса метод заменит знаки вопроса элементами массива. Это не то же
     * самое, что вызывать метод PDOStatement::bindParam(), в котором значения привязываются
     * по ссылке на переменную. Метод PDOStatement::execute() связывает параметры по значению
     */
    $sth = $dbh->prepare("SELECT id, name FROM contacts WHERE id IN ($place_holders)");
    $sth->execute($params);

    ?>

### Примечания

> Замечание:

> Отдельные драйверы требуют закрытия курсора перед запуском следующего запроса.

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

- PDO::prepare() - Подготавливает запрос к выполнению и возвращает связанный с этим запросом объект
- PDOStatement::bindParam() - Привязывает параметр запроса к переменной
- PDOStatement::fetch() - Извлекает следующую строку из результирующего набора
- PDOStatement::fetchAll() - Выбирает строки, которые остались в наборе результатов
- PDOStatement::fetchColumn() - Возвращает данные одного столбца следующей строки результирующего набора

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