DB_common::tableInfo()

DB_common::tableInfo() -- テーブル内のカラムやクエリ結果についての情報を取得する

概要

array tableInfo (mixed $result [, integer $mode = NULL])

説明

テーブル内のカラムやクエリ結果についての情報を取得します。

パラメータ

mixed $result

クエリ結果の DB_result オブジェクト、あるいは テーブル名を表す文字列。

テーブル名を区切る必要がある場合 (すなわち、予約語や空白が 名前に含まれている場合) は、テーブル名に quoteIdentifier() メソッドを適用してから 渡します。

クエリ結果のリソース ID を指定することもできますが、推奨されません。

integer $mode

tableInfo モード定数のいずれか。

返り値

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 モード定数はビット演算されます。そのため、複数指定する場合には | を使用します。

例外・エラー

表 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 ではクエリ結果からテーブル名を取得することが できませんし、データベースから返されるメタデータの形式は大きく異なります。 そのため、このメソッドを使用すると移植性が損なわれます。