db2_prepare
(PECL ibm_db2 >= 1.0.0)
db2_prepare — 実行する SQL 文を準備する
説明
db2_prepare
( resource $connection
, string $statement
[, array $options
] ) : resource
db2_prepare() は、プリペアドステートメントを作成します。
このプリペアドステートメントには、入力パラメータ・出力パラメータ
あるいは入出力パラメータを表すパラメータマーカ (?
)
を含めることができます。プリペアドステートメントにパラメータを渡すには
db2_bind_param() を使用します。
入力パラメータの場合についてのみ、db2_execute()
に渡す配列で指定することも可能です。
アプリケーション内でプリペアドステートメントを使用する利点は、 以下の 3 つです。
- パフォーマンス: 事前に文を準備しておくと、 その文によってデータを取得するための実行計画をデータベースサーバーが 最適化します。その後 db2_execute() でプリペアドステートメントを実行する際にはこの実行計画が再利用され、 実行時に実行計画を毎回作成することによるオーバーヘッドを避けられます。
- セキュリティ: 事前に文を準備する際に、 入力値にパラメータマーカを含めることができます。 入力値にプレースホルダを使用してプリペアドステートメントを実行すると、 入力値の型がカラム定義あるいはパラメータ定義と一致することを データベースサーバーがチェックします。
- 高機能: パラメータマーカの機能は、 単に入力値をプリペアドステートメントに渡すだけではありません。 db2_bind_param() を使用すると、 ストアドプロシージャの OUT パラメータおよび INOUT パラメータから 値を取得することも可能です。
パラメータ
connection
db2_connect() あるいは db2_pconnect() が返した有効なデータベース接続リソース。
statement
ひとつ以上のパラメータマーカを含む SQL 文。
options
文のオプションを含む連想配列。 データベースサーバーがその機能をサポートしている場合に、 このパラメータを使用してスクロール可能なカーソルの使用を 要求することができます。
オプションについての説明は db2_set_option() を参照ください。
返り値
SQL 文のパースに成功し、データベースサーバー内で正しく準備された場合に
ステートメントリソースを返します。データベースサーバーがエラーを返した場合に
false
を返します。返されたエラーの詳細を調べるには、
db2_stmt_error() あるいは db2_stmt_errormsg()
をコールします。
例
例1 パラメータマーカを使用した SQL 文の準備と実行
以下の例では、4 つのパラメータマーカを含む INSERT 文を準備し、 入力値の配列を含む配列を順に処理しながら db2_execute() に値を渡します。
<?php$animals = array( array(0, 'cat', 'Pook', 3.2), array(1, 'dog', 'Peaches', 12.3), array(2, 'horse', 'Smarty', 350.0),);$insert = 'INSERT INTO animals (id, breed, name, weight) VALUES (?, ?, ?, ?)';$stmt = db2_prepare($conn, $insert);if ($stmt) { foreach ($animals as $animal) { $result = db2_execute($stmt, $animal); }}?>
参考
- db2_bind_param() - PHP 変数を SQL 文のパラメータにバインドする
- db2_execute() - プリペアドステートメントを実行する
- db2_stmt_error() - SQL 文が返す SQLSTATE を含む文字列を返す
- db2_stmt_errormsg() - 直近の SQL 文のエラーメッセージを含む文字列を返す