PDOStatement::bindParam
指定された変数名にパラメータをバインドする
説明
public bool PDOStatement::bindParam(
stringint $param
,
mixed &$var
,
int $type
= PDO::PARAM_STR,
int $maxLength
= 0,
mixed $driverOptions
= null
)
ほとんどのパラメータは入力パラメータです。つまり、クエリを構築する際、
パラメータは読み込み専用で使用されます(とはいえ、
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
を返します。
エラー / 例外
PDO::ATTR_ERRMODE
が PDO::ERRMODE_WARNING
に設定されていた場合、E_WARNING
レベルのエラーが発生します。
PDO::ATTR_ERRMODE
が PDO::ERRMODE_EXCEPTION
に設定されていた場合、PDOException がスローされます。
例
例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";
?>
参考
- PDO::prepare
- PDOStatement::execute
- PDOStatement::bindValue