(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)
PDOStatement::execute — Выполняет подготовленный запрос
Метод запускает подготовленный запрос. Если подготовленный запрос включает маркеры параметров, или заполнители, требуется:
Вызвать метод 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);
?>
Замечание:
Отдельные драйверы требуют закрытия курсора перед запуском следующего запроса.