クエリ結果の DB_result オブジェクト、あるいは テーブル名を表す文字列。
テーブル名を区切る必要がある場合 (すなわち、予約語や空白が 名前に含まれている場合) は、テーブル名に quoteIdentifier() メソッドを適用してから 渡します。
クエリ結果のリソース ID を指定することもできますが、推奨されません。
tableInfo モード定数のいずれか。
array - テーブルの情報を含む連想配列、あるいは失敗した場合に DB_Error オブジェクトを返します。
配列の内容は、パラメータ $mode に依存します。
ポータビリティ モード DB_PORTABILITY_LOWERCASE が有効な場合は、テーブル名およびカラム名は小文字に変換されます。
flags 要素には、カラムの追加情報が空白で区切られた 形式で含まれます。DBMS がカラムのデフォルト値を指定できる場合は、 その値は rawurlencode() を通してから渡されます。 これは、値に空白が含まれている際に発生する問題を避けるためです。
$result がテーブル名の場合、ほとんどの DBMS では table 要素および flags 要素しか返しません。クエリから完全な情報を 返すことができるのは、fbsql および mysql だけです。
type 要素には、DBMS から返される値の型が含まれます。 この内容は、DBMS によって違います。
この節では、関数のコール時に どんな $mode を使用すればどんな形式の 配列が返されるのかを説明します。
以下の例の結果は、このクエリに基づいています。
SELECT tblFoo.fldID, tblFoo.fldPhone, tblBar.fldId FROM tblFoo JOIN tblBar ON tblFoo.fldId = tblBar.fldId; |
[0] => Array ( [table] => tblFoo [name] => fldId [type] => int [len] => 11 [flags] => primary_key not_null ) [1] => Array ( [table] => tblFoo [name] => fldPhone [type] => string [len] => 20 [flags] => ) [2] => Array ( [table] => tblBar [name] => fldId [type] => int [len] => 11 [flags] => primary_key not_null ) |
デフォルト出力に含まれる情報に加え、num_fields 要素でカラム数を返します。そして order 要素では カラム名をキー、場所インデックス (そのカラムがデフォルトで 出力される位置) を値とする配列を返します。
結果セット内に同じフィールド名のカラムがある場合は、最後に現れたものが 使用されます。
[num_fields] => 3 [order] => Array ( [fldId] => 2 [fldTrans] => 1 ) |
DB_TABLEINFO_ORDER と似ていますが、配列の次元を ひとつ増やし、テーブル名をキー・フィールド名をサブキーとしています。 これは、同名のカラムをもつ複数のテーブルを連結する際に有用です。
[num_fields] => 3 [ordertable] => Array ( [tblFoo] => Array ( [fldId] => 0 [fldPhone] => 1 ) [tblBar] => Array ( [fldId] => 2 ) ) |
DB_TABLEINFO_ORDER および DB_TABLEINFO_ORDERTABLE の両方の情報を含みます。
tableInfo モード定数はビット演算されます。そのため、複数指定する場合には | を使用します。
表 39-1PEAR_Error の値
エラーコード | エラーメッセージ | 原因 | 対応法 |
---|---|---|---|
DB_ERROR_NOT_CAPABLE | DB backend not capable | ドライバがこの機能をサポートしていません。 | もしほんとうにこの機能が必要な場合は、別のデータベースシステムに 変更します。 |
DB_ERROR_NEED_MORE_DATA | insufficient data supplied | パラメータ $result に渡された内容が、 有効なテーブル名あるいは結果 ID ではありません。 | テーブル名のタイプミスがないか、あるいはクエリが正しく実行 されているかどうかを調べます。 |
DB_ERROR_NODBSELECTED | no database selected | データベースが選択されていません。 | connect() で指定した DSN を調べます。 |
can't distinguish duplicate field names | クエリ結果には同名のカラムが複数含まれています。PHP の Informix 拡張モジュールでは、このような場合に最初のカラムの情報が 上書きされてしまいます。そのため、 tableInfo() は結果セットを適切に表すことが できません。 | 同名のカラムにエイリアスを使用します。 |
この関数は、スタティックにコールする ことはできません。
tableInfo() メソッドをサポートしていないドライバも あります。また、多くの DBMS ではクエリ結果からテーブル名を取得することが できませんし、データベースから返されるメタデータの形式は大きく異なります。 そのため、このメソッドを使用すると移植性が損なわれます。
例 39-1テーブルの情報を取得する
|
例 39-2クエリ結果の情報を取得する
|