(PHP 5 >= 5.1.0, PHP 7, PECL pdo >= 0.1.0)
PDOStatement::execute — プリペアドステートメントを実行する
$input_parameters
] )プリペアドステートメントを実行します。 もし、プリペアドステートメントがパラメータマーカを含む場合、次のいずれかを行わなければなりません。
パラメータマーカに PHP 変数や値をバインドするため PDOStatement::bindParam() や PDOStatement::bindValue() をコールする。 関連づけされたパラメータマーカがあれば、バインドされた変数は入力値を渡す もしくは出力値を受け取ります。
あるいは、入力専用のパラメータ値の配列を渡す
input_parameters
実行される SQL 文の中のバインドパラメータと同数の要素からなる、
値の配列。すべての値は PDO::PARAM_STR
として扱われます。
ひとつのパラメータに対して複数の値をバインドすることはできません。 例えば、IN() 句の中のひとつのパラメータに対して 2 つの値をバインドすることはできません。
指定した数よりも多い値をバインドすることはできません。
input_parameters
のキーが
PDO::prepare() で指定した SQL にある数より多い場合は、
ステートメントが失敗してエラーが発生します。
成功した場合に TRUE
を、失敗した場合に FALSE
を返します。
バージョン | 説明 |
---|---|
5.2.0 |
input_parameters のキーが
SQL で宣言したものと一致しなければならないようになりました。
PHP 5.2.0 より前のバージョンでは一致しない場合は単に無視されるだけでした。
|
例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));
?>
例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
/* バインド変数を伴うプリペアドステートメントの実行 */
$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 = implode(',', array_fill(0, count($params), '?'));
/*
これは、配列 $params のすべての値のための名前なしプレースホルダを含む
ステートメントを準備します。配列 $params の値をそこにバインドし、それから
ステートメントを実行します。これは PDOStatement::bindParam() を使うのとは
違います。こちらの場合は変数への参照が必要になるからです。
PDOStatement::execute() は、単に値だけをバインドします。
*/
$sth = $dbh->prepare("SELECT id, name FROM contacts WHERE id IN ($place_holders)");
$sth->execute($params);
?>
注意:
ドライバによっては、次のステートメントを実行する前に カーソルを閉じ なければならないものもあります。