mixed &execute (
resource $stmt
,
mixed $data = array()
)
prepare() で指定した SQL 文に
$data
の情報を適用し、クエリを
データベースに送信します。
$stmt
prepare() が返すクエリハンドル。
$data
プリペアドステートメントに適用する配列・文字列あるいは数値のデータ。 渡す項目数は、文中のプレースホルダの数と一致していなければなりません。 プレースホルダがひとつだけの場合は配列でない値を指定し、 複数存在する場合は個々の値を要素にもつ配列を指定します。
mixed - 結果を返すクエリ (例えば SELECT クエリなど) の場合は新しい DB_result オブジェクト、 データを操作するクエリ (例えば INSERT クエリなど) の場合は DB_OK、 あるいは失敗した場合には DB_Error オブジェクトを返します。
エラーコード | エラーメッセージ | 原因 | 対応法 |
---|---|---|---|
DB_ERROR_INVALID | invalid | 有効な SQL 文ハンドルではありません。 | 現在実行している SQL 文と prepare() を調べます。 execute() に必要なのは、 prepare() が返すハンドルであって SQL 文自身ではないことに注意しましょう。 |
DB_ERROR_MISMATCH | mismatch | パラメータの数が、プリペアドステートメント中の プレースホルダの数と一致しません。 |
$query に渡した
prepare() 済みの文中の
プレースホルダの数が、$params
で渡した項目の数と一致するかどうかを調べます。
|
DB_ERROR_NODBSELECTED | no database selected | データベースが選択されていません。 | connect() の際の DSN を調べます。 |
その他のエラーコード | データベース固有のエラー。 | PHP マニュアル のデータベース関連の部分を調べ、エラーの原因を判断してください。 たいていの場合は SQL 文が間違っていることが原因です。例えば Oracle データベースに対して SQL で LIMIT を使用しているなどが 考えられます。 |
This function can not be called statically.
$data
に渡す値は、リテラルである必要があります。 SQL 関数 (例えばCURDATE()
など) を渡さないでください。 実行時に処理される SQL 関数は、プリペアドステートメント内に記述する 必要があります。
execute() にスカラーを渡す
<?php
// $db という名前の DB オブジェクトを取得しているとします...
$sth = $db->prepare('INSERT INTO numbers (number) VALUES (?)');
if (PEAR::isError($sth)) {
die($sth->getMessage());
}
$res =& $db->execute($sth, 1);
if (PEAR::isError($res)) {
die($res->getMessage());
}
?>
execute() に配列を渡す
<?php
// $db という名前の DB オブジェクトを取得しているとします...
$sth = $db->prepare('INSERT INTO numbers VALUES (?, ?, ?)');
$data = array(1, 'one', 'en');
$db->execute($sth, $data);
?>