(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
準備された SQL ステートメント中で、 対応する名前もしくは疑問符プレースホルダにパラメータをバインドします。 PDOStatement::bindValue() と異なり、 変数は参照としてバインドされ、PDOStatement::execute() がコールされたときのみ評価されます。
ほとんどのパラメータは入力パラメータです。つまり、クエリを構築する際、
パラメータは読み込み専用で使用されます(とはいえ、
type
によってはキャストされる可能性もあります)。
いくつかのドライバは、出力パラメータとしてデータを返す
ストアドプロシージャの実行をサポートしており、
またいくつかのドライバは、データを渡し更新された値を受け取る、
といった入出力パラメータもサポートしています。
param
パラメータ ID を指定します。名前付けされたプレースホルダを使った文に 対しては、:name 形式のパラメータ名となります。 疑問符プレースホルダを使った文に対しては、1 から始まるパラメータの 位置となります。
var
SQL ステートメントパラメータにバインドする PHP 変数名を指定します。
type
パラメータに対して
PDO::PARAM_*
定数
を使った明示的なデータ型を指定します。
ストアドプロシージャからの INOUT パラメータの場合、
type
パラメータに
PDO::PARAM_INPUT_OUTPUT
ビットを設定するためにビット OR を使用してください。
maxLength
データ型の長さを指定します。パラメータがストアドプロシージャからの
OUT パラメータであることを示す場合、
明示的に長さを設定しなければなりません。
この値は、type
パラメータに
PDO::PARAM_INPUT_OUTPUT
を指定した場合のみ意味があります。
driverOptions
成功した場合に true
を、失敗した場合に false
を返します。
例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("After pureeing fruit, the colour is: $colour");
?>