dbx_query
(PHP 4 >= 4.0.6, PHP 5 < 5.1.0, PECL dbx >= 1.1.0)
dbx_query — クエリを送信し、(ある場合には)結果を全て取得する
説明
dbx_query
( object $link_identifier
, string $sql_statement
[, int $flags
] ) : mixed
クエリを送信し、すべての結果を取得します。
パラメータ
link_identifier
dbx_connect() が返す DBX リンクオブジェクト。
sql_statement
SQL 文。
クエリ内のデータは 適切にエスケープ しておかなければなりません。
flags
flags
パラメータは、返される情報の量を制御する ために使用されます。以下の定数の組み合わせを、論理 OR 演算子 (|) で連結したものとなります。DBX_COLNAMES_* フラグはphp.ini
の dbx.colnames_case 設定を上書きします。DBX_RESULT_INDEX
-
これは常に設定され、結果に二次元配列の
data プロパティを含めます。たとえば
data[2][3]
では2
が行番号 (レコード番号)を表し、3
がカラム番号 (フィールド番号)を表します。最初の行やカラムの番号は 0 です。DBX_RESULT_ASSOC
が指定された場合、返される オブジェクトにはDBX_RESULT_INFO
に関連する 情報が(指定していなくても)含まれます。 DBX_RESULT_INFO
- カラムに関する情報、つまりフィールド名とフィールドの型を含めます。
DBX_RESULT_ASSOC
-
返されるオブジェクトの data プロパティの
キーとして、関連するカラム名の値がアクセスされます。
関連付けられた結果は数値添字となっているので、
data[0][0]
を変更するとdata[0]['最初のカラムのフィールド名']
も同様に 変更されます。 DBX_RESULT_UNBUFFERED
- このフラグは data プロパティを作成せず、 rows プロパティの初期値を 0 に設定します。 結果セットが大きくなる場合にこのフラグを使用し、 dbx_fetch_row() を使用して結果を 1 行ごとに 取得してください。 dbx_fetch_row() 関数は、このクエリで設定した フラグの内容を反映じた行を返します。また、この関数がコールされる たびに rows が更新されます。
DBX_COLNAMES_UNCHANGED
- 返されるカラム名の大文字小文字を変更しません。
DBX_COLNAMES_UPPERCASE
- 返されるカラム名を大文字に変更します。
DBX_COLNAMES_LOWERCASE
- 返されるカラム名を小文字に変更します。
flags
パラメータの実際の値にかかわらず、常にDBX_RESULT_INDEX
が有効となることに注意しましょう。 つまり、結果的に使用可能なのは以下の組み合わせだけであるということです。-
DBX_RESULT_INDEX
-
DBX_RESULT_INDEX
|DBX_RESULT_INFO
-
DBX_RESULT_INDEX
|DBX_RESULT_INFO
|DBX_RESULT_ASSOC
-flags
を指定しなかった場合、これがデフォルトです。
返り値
dbx_query() は、成功した場合に オブジェクトあるいは
1
、失敗した場合に 0
を返します。
結果オブジェクトが返されるのは、sql_statement
で指定されたクエリが結果セットを生成する場合(例: SELECT クエリ。結果が
0 件の場合も含む)のみです。
返されるオブジェクトは、flags
の設定により 4 つまたは 5 つのプロパティを保持します。
- handle
接続したデータベースの有効なハンドルで、モジュール専用関数で (必要ならば)使用されます。
<?php$result = dbx_query($link, "SELECT id FROM table");mysql_field_len($result->handle, 0);?>
- cols および rows
これらは、それぞれカラム数(フィールド数)および行数(レコード数) を表します。
<?php$result = dbx_query($link, 'SELECT id FROM table');echo $result->rows; // レコード数echo $result->cols; // フィールド数?>
- info (オプション)
-
flags
パラメータにDBX_RESULT_INFO
あるいはDBX_RESULT_ASSOC
が指定されている場合のみ 返されます。2 次元の配列で、2 つのキー(name
およびtype
)を持ち、カラムの情報を取得するために 使用します。例1 各フィールドの名前と型を一覧表示する
<?php$result = dbx_query($link, 'SELECT id FROM table', DBX_RESULT_INDEX | DBX_RESULT_INFO);for ($i = 0; $i < $result->cols; $i++ ) { echo $result->info['name'][$i] . "\n"; echo $result->info['type'][$i] . "\n"; }?>
- data
-
このプロパティには結果のデータが含まれます。
flags
の設定によってはこのデータはカラム名と関連付けられているでしょう。DBX_RESULT_ASSOC
が設定されていた場合、$result->data[2]["field_name"]
のように使用可能です。例2 data プロパティの内容を HTML テーブルで表示する
<?php$result = dbx_query($link, 'SELECT id, parentid, description FROM table');echo "<table>\n";foreach ($result->data as $row) { echo "<tr>\n"; foreach ($row as $field) { echo "<td>$field</td>"; } echo "</tr>\n";}echo "</table>\n";?>
例3 UNBUFFERED クエリの処理法
<?php$result = dbx_query ($link, 'SELECT id, parentid, description FROM table', DBX_RESULT_UNBUFFERED);echo "<table>\n";while ($row = dbx_fetch_row($result)) { echo "<tr>\n"; foreach ($row as $field) { echo "<td>$field</td>"; } echo "</tr>\n";}echo "</table>\n";?>
例
例4 返り値を処理する方法
<?php$link = dbx_connect(DBX_ODBC, "", "db", "username", "password") or die("接続できませんでした");$result = dbx_query($link, 'SELECT id, parentid, description FROM table');if (is_object($result) ) { // ... ここで何かを行います。詳細は以下の例で示します。 ... // まず、フィールド名とデータ型を表示します。 // 次に、返されたフィールド値をもとに表を作成します。} else { exit("クエリに失敗しました");}dbx_close($link);?>
注意
注意:
モジュール固有のドキュメントも参照ください。
Oracle データベースでは、クエリ結果のカラム名は小文字で返されます。
参考
- dbx_escape_string() - SQL ステートメントで安全に使用できるように文字列をエスケープする
- dbx_fetch_row() - DBX_RESULT_UNBUFFERED フラグを指定した クエリ結果から、行を取得する
- dbx_connect() - 接続/データベースをオープンする