関数・クラス解説
db2_bind_param
version:PECL ibm_db2 >= 1.0.0 (公式)PHP 変数を SQL 文のパラメータにバインドする
公式リファレンス
書式
db2_bind_param ( resource $stmt , int $parameter_number , string $variable_name [, int $parameter_type [, int $data_type = 0 [, int $precision = -1 [, int $scale = 0 ]]]] ) : bool
説明
db2_prepare() が返したステートメントリソース内の SQL 文のパラメータに PHP 変数をバインドします。 db2_execute() へのオプション配列の一部として 変数を渡すのに比べ、この関数を使用すると パラメータの型、データの型、精度、位取りなどの詳細を制御できるようになります。
パラメータ
- stmt
- db2_prepare() が返すプリペアドステートメント。
- parameter_number
- プリペアドステートメントのパラメータの位置。 1 から始まります。
- variable_name
- parameter_number で指定したパラメータに バインドする PHP 変数の名前を表す文字列。
- parameter_type
- PHP 変数を SQL パラメータにバインドする際に 入力パラメータとするのか (DB2_PARAM_IN) 出力パラメータとするのか (DB2_PARAM_OUT) あるいは入出力両方を許可するのか (DB2_PARAM_INOUT) を指定する定数。 メモリのオーバーヘッドを避けるため、DB2_PARAM_FILE を指定して PHP 変数をファイルにバインドし、 ファイルからラージオブジェクト (BLOB、CLOB あるいは DBCLOB) データを読み込むようにするすることも可能です。
- data_type
- PHP 変数をどの SQL データ型にバインドするのかを指定する定数。 DB2_BINARY、 DB2_CHAR、DB2_DOUBLE あるいは DB2_LONG のうちのいずれか。
- precision
- 変数をデータベースにバインドする際の精度を指定します。 このパラメータは、ストアドプロシージャから XML 出力の値を取得する際にも使用します。 非負の値を指定すると、それがデータベースから取得する XML データの最大サイズとなります。 このパラメータを使用しない場合は、 ストアドプロシージャから XML 出力を取得する際の最大サイズを デフォルトの 1MB とみなします。
- scale
- 変数をデータベースにバインドする際の位取りを指定します。
返値
成功した場合に TRUE を、失敗した場合に FALSE を返します。
サンプル
例1 PHP 変数をプリペアドステートメントにバインドする
以下の例の SQL 文では、WHERE 句の中で 2 つの入力パラメータを使用しています。 この 2 つのパラメータに PHP 変数をバインドするために db2_bind_param() をコールします。 db2_bind_param() をコールする前に PHP 変数を宣言したり代入したりする必要がないことに注意しましょう。 この例では、$lower_limit については db2_bind_param() がコールされる前に 値が代入されていますが、$upper_limit については db2_bind_param() をコールした後で代入されています。 db2_execute() をコールする前には、 必ず変数をバインドしなければなりません。また、入力パラメータについては 何らかの値を代入しておく必要があります。
$sql = 'SELECT name, breed, weight FROM animals
WHERE weight > ? AND weight < ?';
$conn = db2_connect($database, $user, $password);
$stmt = db2_prepare($conn, $sql);
// db2_bind_param() のコール前に変数を宣言できます
$lower_limit = 1;
db2_bind_param($stmt, 1, "lower_limit", DB2_PARAM_IN);
db2_bind_param($stmt, 2, "upper_limit", DB2_PARAM_IN);
// また、db2_bind_param() をコールした後で変数を宣言することも可能です
$upper_limit = 15.0;
if (db2_execute($stmt)) {
while ($row = db2_fetch_array($stmt)) {
print "{$row[0]}, {$row[1]}, {$row[2]}\n";
}
}
上の例の出力は以下となります。
Pook, cat, 3.2
Rickety Ride, goat, 9.7
Peaches, dog, 12.3
例2 IN および OUT パラメータを使用したストアドプロシージャのコール
以下の例のストアドプロシージャ match_animal は、 3 つのさまざまなパラメータを受け取ります。
最初の動物の名前を入力として受け取る 入力 (IN) パラメータ。
2 番目の動物の名前を入力として受け取り、その名前に一致する動物が データベースに存在する場合に文字列 TRUE を返す、入出力 (INOUT) パラメータ。
指定した 2 匹の動物の合計体重を返す、出力 (OUT) パラメータ。
さらにこのストアドプロシージャは結果セットを返します。その内容は、 最初のパラメータで指定した動物から 2 番目のパラメータで指定した動物までの 動物の一覧をアルファベット順に並べたものとなります。
$sql = 'CALL match_animal(?, ?, ?)';
$conn = db2_connect($database, $user, $password);
$stmt = db2_prepare($conn, $sql);
$name = "Peaches";
$second_name = "Rickety Ride";
$weight = 0;
db2_bind_param($stmt, 1, "name", DB2_PARAM_IN);
db2_bind_param($stmt, 2, "second_name", DB2_PARAM_INOUT);
db2_bind_param($stmt, 3, "weight", DB2_PARAM_OUT);
print "コール前のバインド変数の値:\n";
print " 1: {$name} 2: {$second_name} 3: {$weight}\n\n";
if (db2_execute($stmt)) {
print "コール後のバインド変数の値:\n";
print " 1: {$name} 2: {$second_name} 3: {$weight}\n\n";
print "結果:\n";
while ($row = db2_fetch_array($stmt)) {
print " {$row[0]}, {$row[1]}, {$row[2]}\n";
}
}
上の例の出力は以下となります。
コール前のバインド変数の値:
1: Peaches 2: Rickety Ride 3: 0
コール後のバインド変数の値:
1: Peaches 2: TRUE 3: 22
結果:
Peaches, dog, 12.3
Pook, cat, 3.2
Rickety Ride, goat, 9.7
例3 バイナリラージオブジェクト (BLOB) をファイルから直接挿入する
ラージオブジェクトのデータは、通常は XML ドキュメントあるいは 音声ファイルのようなファイルに保存されています。 いったんファイルの内容を PHP 変数に読み込んだうえで SQL 文にバインドする代わりに、ファイルを直接 sql 文の入力パラメータに バインドすることでメモリのオーバーヘッドを避けることができます。 以下の例で、BLOB カラムにファイルを直接バインドする方法を説明します。
$stmt = db2_prepare($conn, "INSERT INTO animal_pictures(picture) VALUES (?)");
$picture = "/opt/albums/spook/grooming.jpg";
$rc = db2_bind_param($stmt, 1, "picture", DB2_PARAM_FILE);
$rc = db2_execute($stmt);
参考
ワード検索
※入力キーワードが、関数名・説明文・タグに含まれるものを検索関数名アルファベット別
最終更新一覧
●stristr
大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却
●stripslashes
バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く
●stripos
大文字小文字を区別せずに文字列が最初に現れる位置を取得する
●stripcslashes
addcslashes() でクォートされた文字列をアンクォートする
●strip_tags
文字列から HTML と PHP のタグを除去して返却
●strcspn
指定した文字が最初に現れる位置を調べる
●strcoll
ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する
●strcmp
2つの文字列を比較し同じか(あるいは大小)を判定する
●strchr
strstr() のエイリアス
●strcasecmp
2つの文字列を比較(大文字小文字を区別せず同じとみなす)
カテゴリー一覧
PHP の振る舞いの変更
音声フォーマットの操作
認証サービス
コマンドライン関連
圧縮およびアーカイブ
暗号
データベース関連
日付および時刻関連
ファイルシステム
自然言語および文字エンコーディング
画像処理および作成
メール関連
数学
テキスト以外の MIME 型
プロセス制御
その他の基本モジュール
その他のサービス
検索エンジン用の拡張モジュール
サーバー固有のモジュール
セッション関連
テキスト処理
変数・データ型関連
ウェブサービス
Windows 用のモジュール
XML 操作
GUI用の拡張モジュール