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

PEAR DB の実行時オプションを設定する (Previous) DB 結果セット (Next)
Last updated: Mon, 01 Sep 2014 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

There are no user contributed notes for this page.