integer autoExecute (
string $table
,
array $fields_values
,
integer $mode =
= DB_AUTOQUERY_INSERT
,
string $where
= = false
)
INSERT あるいは UPDATE クエリを自動的に準備し、実行します。
このメソッドは、 autoPrepare() を使用して SQL 文を 組み立て、それを execute() を使用して実行します。
$table
テーブルの名前。
$fields_values
フィールド名をキーとし、フィールドの値を対応させた連想配列。
値は、現在の DBMS の 要求に応じて自動的にエスケープおよびクォートが行われます。
$mode
作成するクエリの型 (DB_AUTOQUERY_INSERT あるいは DB_AUTOQUERY_UPDATE)。
$where
WHERE 句に使用する文字列。
$mode
が
DB_AUTOQUERY_UPDATE の場合にのみ使用されます。
この文字列は直接クエリに組み込まれます。そのため、DBMS の規約に
従ってリテラルのエスケープおよびクォートを行う必要があります。
エラーコード | エラーメッセージ | 原因 | 対応法 |
---|---|---|---|
DB_ERROR_NEED_MORE_DATA | insufficient data supplied | フィールド名および値を含む連想配列が空です。 | 連想配列の内容を調べ、修正します。 |
DB_ERROR_SYNTAX | syntax error | モードの指定が間違っています。 | INSERT クエリ用の DB_AUTOQUERY_INSERT、あるいは UPDATE クエリ用の DB_AUTOQUERY_UPDATE のみが指定可能です。 |
DB_ERROR_NODBSELECTED | no database selected | データベースが選択されていません。 | connect() の際の DSN を調べます。 |
その他のエラーコード | データベース固有のエラー。 | PHP マニュアル のデータベース関連の部分を調べ、エラーの原因を判断してください。 |
This function can not be called statically.
$data
に渡す値は、リテラルである必要があります。 SQL 関数 (例えばCURDATE()
など) を渡さないでください。 実行時に処理される SQL 関数は、プリペアドステートメント内に記述する 必要があります。
insert モードでの autoExecute() の使用法
<?php
// $db という名前の DB オブジェクトを取得しているとします...
$table_name = 'user';
$fields_values = array(
'id' => 1,
'name' => 'Fabien',
'country' => 'France'
);
$res = $db->autoExecute($table_name, $fields_values,
DB_AUTOQUERY_INSERT);
if (PEAR::isError($res)) {
die($res->getMessage());
}
?>
update モードでの autoExecute() の使用法
<?php
// $db という名前の DB オブジェクトを取得しているとします...
$table_name = 'user';
$fields_values = array(
'country' => 'France',
);
$res = $db->autoExecute($table_name, $fields_values,
DB_AUTOQUERY_UPDATE, "country = 'Japan'");
if (PEAR::isError($res)) {
die($res->getMessage());
}
?>