prepareQuery() および executeQuery*() によって、より強力で柔軟性のあるクエリを実行することができます。 値が違うだけの同じクエリを何度も実行する場合などに使用できます。 例えば、住所の一覧をデータベースに登録する場合などがこれにあたります。 また、さまざまなデータベースをサポートする必要があり、 それらがそれぞれ標準の SQL とはことなる実装をしている場合などにも便利です。
二種類のデータベースをサポートする必要があり、それらはそれぞれ INSERT の構文が異なっているとしましょう。
db1 : INSERT INTO tbl_name ( col1, col2 ... ) VALUES ( expr1, expr2 ... ) db2 : INSERT INTO tbl_name SET col1=expr1, col2=expr2 ... |
$statement['db1']['INSERT_PERSON'] = "INSERT INTO person ( surname, name, age ) VALUES ( ?, ?, ? )" ; $statement['db2']['INSERT_PERSON'] = "INSERT INTO person SET surname=?, name=?, age=?" ; |
上の機能を使用するには、二段階の手続きが必要です。まず最初に prepareQuery でステートメントを準備し、次に executeQuery でそれを実行します。
Prepare() は、最低一度はコールする必要があります。これがステートメントのハンドルを返します。
汎用的なステートメントを作成するのは簡単です。 まずこのように、普通の SQL を書きます。
SELECT surname, name, age FROM person WHERE name = 'name_to_find' AND age < 'age_limit' |
SELECT surname, name, age FROM person WHERE name = ? AND age < ? |
prepareQuery() は、さまざまな形式のプレースホルダやワイルドカードをサポートしています。
? - (推奨) これは、文字列や数値のようなスカラー値を表します。 値は、データベースに応じてクォートされます。 |
! - これはスカラー値を表し、 ステートメントに "そのままの形で" 挿入されます。 |
& - ここには実際に存在するファイル名を指定し、 そのファイルの内容がステートメントに挿入されます (画像ファイルのバイナリデータをデータベースに格納するなど)。 |
ステートメントを準備したら、次に実行します。実行とは、 プリペアドステートメントの変数に値を代入することです。これを行うには、 executeQuery() に二つの引数を指定します。 prepareQuery() のステートメントハンドルと、代入する値の配列です。 配列は、数値添字形式でなければなりません。 配列の最初のエントリが最初のワイルドカードに、 そして二番目のエントリが二番目のワイルドカードに、 といったように対応します。 並び順は、使用しているワイルドカード文字の種類とは独立しています。
例 39-1データベースへのデータの挿入
|
INSERT INTO numbers VALUES( '1', 'one', 'en') INSERT INTO numbers VALUES( '2', 'two', 'to') INSERT INTO numbers VALUES( '3', 'three', 'tre') INSERT INTO numbers VALUES( '4', 'four', 'fire') |
例 39-2 executeQuery() のかわりに executeMultiple() を使用する
|
executeQuery*() は、失敗した場合に MDB_Error、それ以外の場合に MDB_OK を返します。