array tableInfo (
mixed $result
,
integer $mode
= = null
)
テーブル内のカラムやクエリ結果についての情報を取得します。
$result
クエリ結果の DB_result オブジェクト、あるいは テーブル名を表す文字列。
テーブル名を区切る必要がある場合 (すなわち、予約語や空白が 名前に含まれている場合) は、テーブル名に quoteIdentifier() メソッドを適用してから 渡します。
クエリ結果のリソース ID を指定することもできますが、推奨されません。
$mode
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
デフォルト出力に含まれる情報に加え、num_fields
要素でカラム数を返します。そして order
要素では
カラム名をキー、場所インデックス (そのカラムがデフォルトで
出力される位置) を値とする配列を返します。
結果セット内に同じフィールド名のカラムがある場合は、最後に現れたものが 使用されます。
DB_TABLEINFO_ORDER と似ていますが、配列の次元を ひとつ増やし、テーブル名をキー・フィールド名をサブキーとしています。 これは、同名のカラムをもつ複数のテーブルを連結する際に有用です。
DB_TABLEINFO_ORDER および DB_TABLEINFO_ORDERTABLE の両方の情報を含みます。
tableInfo モード定数はビット演算されます。そのため、複数指定する場合には
|
を使用します。
エラーコード | エラーメッセージ | 原因 | 対応法 |
---|---|---|---|
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() は結果セットを適切に表すことが できません。 | 同名のカラムにエイリアスを使用します。 |
This function can not be called statically.
tableInfo() メソッドをサポートしていないドライバも あります。また、多くの DBMS ではクエリ結果からテーブル名を取得することが できませんし、データベースから返されるメタデータの形式は大きく異なります。 そのため、このメソッドを使用すると移植性が損なわれます。
テーブルの情報を取得する
<?php
// $db という名前の DB オブジェクトを取得しているとします...
$info = $db->tableInfo('tablename');
print_r($info);
?>
クエリ結果の情報を取得する
<?php
// $db という名前の DB オブジェクトを取得しているとします...
$res =& $db->query('SELECT * FROM tablename');
$info = $db->tableInfo($res);
print_r($info);
?>
バージョン 1.6.0 より前は、tableInfo() は DB_result クラスに属しており、このようにコールする 必要がありました。
<?php
// $db という名前の DB オブジェクトを取得しているとします...
$res =& $db->query('SELECT * FROM tablename');
$info = $res->tableInfo(); // <---- 古い書き方です
print_r($info);
?>