DB_common::tableInfo()
DB_common::tableInfo() – テーブル内のカラムやクエリ結果についての情報を取得する
Synopsis
array tableInfo (
mixed $result
,
integer $mode
= = null
)
Description
テーブル内のカラムやクエリ結果についての情報を取得します。
Parameter
-
mixed
$result
-
クエリ結果の DB_result オブジェクト、あるいは
テーブル名を表す文字列。
テーブル名を区切る必要がある場合 (すなわち、予約語や空白が
名前に含まれている場合) は、テーブル名に
quoteIdentifier() メソッドを適用してから
渡します。
クエリ結果のリソース ID を指定することもできますが、推奨されません。
-
integer
$mode
-
tableInfo モード定数のいずれか。
Return value
array - テーブルの情報を含む連想配列、あるいは失敗した場合に
DB_Error オブジェクトを返します。
配列の内容は、パラメータ $mode
に依存します。
ポータビリティ
モード DB_PORTABILITY_LOWERCASE
が有効な場合は、テーブル名およびカラム名は小文字に変換されます。
flags 要素には、カラムの追加情報が空白で区切られた
形式で含まれます。DBMS がカラムのデフォルト値を指定できる場合は、
その値は rawurlencode() を通してから渡されます。
これは、値に空白が含まれている際に発生する問題を避けるためです。
$result
がテーブル名の場合、ほとんどの DBMS では
table 要素および
flags 要素しか返しません。クエリから完全な情報を
返すことができるのは、fbsql および mysql だけです。
type 要素には、DBMS から返される値の型が含まれます。
この内容は、DBMS によって違います。
tableInfo モード
この節では、関数のコール時に
どんな $mode
を使用すればどんな形式の
配列が返されるのかを説明します。
以下の例の結果は、このクエリに基づいています。
SELECT tblFoo.fldID, tblFoo.fldPhone, tblBar.fldId
FROM tblFoo
JOIN tblBar ON tblFoo.fldId = tblBar.fldId;
-
NULL あるいは 0
-
[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
)
-
DB_TABLEINFO_ORDER
-
デフォルト出力に含まれる情報に加え、num_fields
要素でカラム数を返します。そして order 要素では
カラム名をキー、場所インデックス (そのカラムがデフォルトで
出力される位置) を値とする配列を返します。
結果セット内に同じフィールド名のカラムがある場合は、最後に現れたものが
使用されます。
[num_fields] => 3
[order] => Array (
[fldId] => 2
[fldTrans] => 1
)
-
DB_TABLEINFO_ORDERTABLE
-
DB_TABLEINFO_ORDER と似ていますが、配列の次元を
ひとつ増やし、テーブル名をキー・フィールド名をサブキーとしています。
これは、同名のカラムをもつ複数のテーブルを連結する際に有用です。
[num_fields] => 3
[ordertable] => Array (
[tblFoo] => Array (
[fldId] => 0
[fldPhone] => 1
)
[tblBar] => Array (
[fldId] => 2
)
)
-
DB_TABLEINFO_FULL
-
DB_TABLEINFO_ORDER および
DB_TABLEINFO_ORDERTABLE の両方の情報を含みます。
tableInfo モード定数はビット演算されます。そのため、複数指定する場合には
| を使用します。
Throws
Possible PEAR_Error values
エラーコード |
エラーメッセージ |
原因 |
対応法 |
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() は結果セットを適切に表すことが
できません。
|
同名のカラムにエイリアスを使用します。
|
Note
This function can not be called
statically.
tableInfo() メソッドをサポートしていないドライバも
あります。また、多くの DBMS ではクエリ結果からテーブル名を取得することが
できませんし、データベースから返されるメタデータの形式は大きく異なります。
そのため、このメソッドを使用すると移植性が損なわれます。
Example
<?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);
?>