(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)
PDOStatement::bindParam — Привязывает параметр запроса к переменной
$param
,&$var
,$type
= PDO::PARAM_STR,$maxLength
= 0,$driverOptions
= null
Связывает переменную PHP с именованным или неименованным параметром подготавливаемого SQL-запроса. В отличие от PDOStatement::bindValue(), переменная привязывается по ссылке и её значение будет вычисляться во время вызова PDOStatement::execute().
В большинстве случаев в подготавливаемых запросах используются только входные
параметры, то есть при построении запроса доступ к ним осуществляется только в
режиме чтения (возможно приведение
в соответствии с type
). Тем не менее, некоторые драйверы позволяют запускать хранимые
процедуры, которые, в свою очередь, могут возвращать данные посредством
выходных параметров. Зачастую, такие параметры используются одновременно
как входные и как выходные.
param
Идентификатор параметра. Для подготавливаемых запросов с именованными параметрами это будет имя в виде :name. Если используются неименованные параметры (знаки вопроса ?) это будет позиция псевдопеременной в запросе (начиная с 1).
var
Имя переменной PHP, которую требуется привязать к параметру SQL-запроса.
type
Явно заданный тип данных параметра. Тип задаётся одной из констант
PDO::PARAM_*
. Если параметр используется, в том числе для вывода информации
из хранимой процедуры, к значению аргумента
type
необходимо добавить
PDO::PARAM_INPUT_OUTPUT
, используя оператор побитовое ИЛИ.
maxLength
Размер типа данных. Чтобы указать, что параметр используется для вывода
данных из хранимой процедуры, необходимо явно задать его размер.
Имеет значение, только если у параметра type
установлено значение PDO::PARAM_INPUT_OUTPUT
.
driverOptions
Функция возвращает true
, если выполнилась успешно, или false
, если возникла ошибка.
Метод выдаёт ошибку уровня E_WARNING
, если для атрибута PDO::ATTR_ERRMODE
установили режим PDO::ERRMODE_WARNING
.
Метод выбрасывает исключение PDOException, если для атрибута PDO::ATTR_ERRMODE
установили режим PDO::ERRMODE_EXCEPTION
.
Пример #1 Выполнение подготовленного запроса с именованными псевдопеременными
<?php
/* Выполнение запроса с привязкой PHP-переменных */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindParam('calories', $calories, PDO::PARAM_INT);
/* Имена также могут начинаться с двоеточия ":" (необязательно) */
$sth->bindParam(':colour', $colour, PDO::PARAM_STR);
$sth->execute();
?>
Пример #2 Выполнение подготовленного запроса с неименованными псевдопеременными (?)
<?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);
$sth->execute();
?>
Пример #3 Вызов хранимой процедуры с INOUT-параметром
<?php
/* Вызов хранимой процедуры с INOUT-параметром */
$colour = 'red';
$sth = $dbh->prepare('CALL puree_fruit(?)');
$sth->bindParam(1, $colour, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->execute();
print "После приготовления фруктового пюра, цвет - $colour";
?>