dbx_query

(PHP 4 >= 4.0.6, PHP 5 <= 5.0.4)

dbx_query -- クエリを送信し、(ある場合には)結果を全て取得する

説明

mixed dbx_query ( object link_identifier, string sql_statement [, int flags] )

dbx_query() は、成功した場合に オブジェクトあるいは 1、失敗した場合に 0 を返します。 結果オブジェクトが返されるのは、sql_statement で指定されたクエリが結果セットを生成する場合(例: SELECT クエリ。結果が 0 件の場合も含む)のみです。

例 1. 返り値を処理する方法

<?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);
?>

flags パラメータは、返される情報の量を制御する ために使用されます。以下の定数の組み合わせを、論理 OR 演算子 (|) で連結したものとなります。DBX_COLNAMES_* フラグは php.ini の dbx.colnames_case 設定を上書きします。

DBX_RESULT_INDEX

これは常に設定され、結果に 2 次元配列 の 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 (PHP 5)

このフラグは data プロパティを作成せず、 rows プロパティの初期値を 0 に設定します。 結果セットが大きくなる場合にこのフラグを使用し、 dbx_fetch_row() を使用して結果を 1 行ごとに 取得してください。

dbx_fetch_row() 関数は、このクエリで設定した フラグの内容を反映じた行を返します。また、この関数がコールされる たびに rows が更新されます。

DBX_COLNAMES_UNCHANGED (PHP 4.3.0 以降で有効)

返されるカラム名の大文字小文字を変更しません。

DBX_COLNAMES_UPPERCASE (PHP 4.3.0 以降で有効)

返されるカラム名を大文字に変更します。

DBX_COLNAMES_LOWERCASE (PHP 4.3.0 以降で有効)

返されるカラム名を小文字に変更します。

flags パラメータの実際の値にかかわらず、常に DBX_RESULT_INDEX が有効となることに注意しましょう。 つまり、結果的に使用可能なのは以下の組み合わせだけであるということです。

返されるobject は、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)を持ち、カラムの情報を取得するために 使用します。

例 2. 各フィールドの名前と型を一覧表示する

<?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"] のように使用可能です。

例 3. 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";
?>

例 4. 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";

?>

注意: モジュール毎のドキュメントも参照ください。

Oracle データベースでは、クエリ結果のカラム名は小文字で返されます。

dbx_escape_string()dbx_fetch_row() および dbx_connect() も参照ください。