resource autoPrepare (
string $table
,
array $table_fields
,
integer $mode =
= DB_AUTOQUERY_INSERT
,
string $where
= = false
)
SQL の INSERT 文あるいは UPDATE 文を自動的に組み立て、 execute() あるいは executeMultiple() で使用できるようにします。
$table
テーブルの名前。
$table_fields
フィールド名を含む配列。
これらのフィールドには ?
プレースホルダが
割り当てられることに中いしましょう。そのため、
execute() で渡すデータは、現在の DBMS の
要求に応じて自動的にエスケープおよびクォートが行われます。
$mode
作成するクエリの型 (DB_AUTOQUERY_INSERT あるいは DB_AUTOQUERY_UPDATE)。
$where
WHERE 句に使用する文字列。
$mode
が
DB_AUTOQUERY_UPDATE の場合にのみ使用されます。
この文字列は直接クエリに組み込まれます。そのため、DBMS の規約に
従ってリテラルのエスケープおよびクォートを行う必要があります。
resource - クエリのリソースハンドル、あるいは失敗した場合に DB_Error オブジェクトを返します。
エラーコード | エラーメッセージ | 原因 | 対応法 |
---|---|---|---|
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.
insert モードでの autoPrepare() の使用法
<?php
// $db という名前の DB オブジェクトを取得しているとします...
$table_name = 'user';
$table_fields = array('name', 'country');
$table_values = array('Zoe', 'France');
$sth = $db->autoPrepare($table_name, $table_fields,
DB_AUTOQUERY_INSERT);
if (PEAR::isError($sth)) {
die($sth->getMessage());
}
$res =& $db->execute($sth, $table_values);
if (PEAR::isError($res)) {
die($res->getMessage());
}
?>
update モードでの autoPrepare() の使用法
<?php
// $db という名前の DB オブジェクトを取得しているとします...
$table_name = 'user';
$table_fields = array('name', 'country');
$table_values = array('Bob', 'USA');
$sth = $db->autoPrepare($table_name, $table_fields,
DB_AUTOQUERY_UPDATE, "country = 'Japan'");
if (PEAR::isError($sth)) {
die($sth->getMessage());
}
$res =& $db->execute($sth, $table_values);
if (PEAR::isError($res)) {
die($res->getMessage());
}
?>