PDOStatement::execute

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

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

Описание

public 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() - Возвращает данные одного столбца следующей строки результирующего набора