| ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot |
導入 - 実行導入 - 実行 – Prepare および Execute/ExecuteMultiple
説明目的prepareQuery() および executeQuery*() によって、より強力で柔軟性のあるクエリを実行することができます。 値が違うだけの同じクエリを何度も実行する場合などに使用できます。 例えば、住所の一覧をデータベースに登録する場合などがこれにあたります。 また、さまざまなデータベースをサポートする必要があり、 それらがそれぞれ標準の SQL とはことなる実装をしている場合などにも便利です。 二種類のデータベースをサポートする必要があり、それらはそれぞれ INSERT の構文が異なっているとしましょう。 db1 : INSERT INTO tbl_name ( col1, col2 ... ) VALUES ( expr1, expr2 ... ) db2 : INSERT INTO tbl_name SET col1=expr1, col2=expr2 ... それぞれに対応するスクリプトを作成するには、 このような形式でクエリを配列にします。
<?php
準備 (Prepare)上の機能を使用するには、二段階の手続きが必要です。まず最初に 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() で使用することができます。 prepareQuery() は、さまざまな形式のプレースホルダやワイルドカードをサポートしています。
Execute/ ExecuteMultipleステートメントを準備したら、次に実行します。実行とは、 プリペアドステートメントの変数に値を代入することです。これを行うには、 executeQuery() に二つの引数を指定します。 prepareQuery() のステートメントハンドルと、代入する値の配列です。 配列は、数値添字形式でなければなりません。 配列の最初のエントリが最初のワイルドカードに、 そして二番目のエントリが二番目のワイルドカードに、 といったように対応します。 並び順は、使用しているワイルドカード文字の種類とは独立しています。 データベースへのデータの挿入
<?php この例では、クエリが四回実行されます。 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') executeMultiple() も同じように動作しますが、二次元の配列を指定する必要があります。 そのかわり、この例のようにいちいち foreach を行わずにすみます。 executeQuery() のかわりに executeMultiple() を使用する
<?php 結果は同じです。途中で失敗すると、それ以降のレコードは実行されません。 executeQuery*() は、失敗した場合に MDB_Error、それ以外の場合に MDB_OK を返します。 |
各種マニュアル:
PHPマニュアル |
PEARマニュアル |
Smarty(英語)マニュアル |
PHP-GTKマニュアル |
「導入 - 実行」をGoogle検索
|