MDB2 の Reverse ドライバを使用するには、まず Reverse
ドライバを MDB2 のインスタンスに読み込む必要があります。
まずは MDB2 のインスタンスを作成し、接続を確立しましょう。
上の例では、既存のデータベースへの有効な接続を作成するために、
データベースサーバへの有効なユーザ名とパスワードを使用しています。
これで、サンプルアプリケーション内で MDB2 Reverse 機能のすべてを使用できるようになりました。
このドキュメントで使用するためのテーブルを、このように作成します。
getTableFieldDefinition() メソッド
getTableFieldDefinition() メソッドの目的は、
テーブルのフィールド定義情報を配列で取得することです。
この配列を使用すると、別の場所で同じテーブルを作成したり
その他必要に応じて使用できます。先ほど定義した MDB2 インスタンスを用いてデータベースに接続し、
対象となるテーブルを作成し、調べたい特定のフィールドをリバースエンジニアリングします。
まず、対象となるテーブルとフィールドを定義する必要があります。
そうすれば、たった一行コードを書くだけでテーブル定義を配列として取得できるようになります。
それから、var_dump で結果を表示しています。
例 39-3テーブル定義の取得 <?php
// リバースエンジニアリング (定義の取得) を行いたいフィールドを設定します
$field = 'somedate';
// テーブルのフィールド定義を取得し、変数に保存します。
// 返り値は、成功した場合は配列、失敗した場合は MDB2 error となります。
// そこで、ここでは追加のチェックは必要ありません。
$def = $mdb2->getTableFieldDefinition($table, $field);
// 最後に結果を画面に出力します
var_dump($def);
?> |
|
フィールド定義に依存しますが、返される結果は次のようになるでしょう。
array(1) {
[0] => array(5) {
['notnull'] => bool(false)
['nativetype'] => string(4) "date"
['default'] => NULL
['type'] => string(4) "date"
['mdb2type'] => string(4) "date"
}
} |
tableInfo() メソッド
このメソッドは、テーブルに関する多くの情報を返します。
さまざま場面で使用することができます。
返される情報の内容は RDBMS によって微妙に異なり、結果の形式も変わってきます。
このメソッドは、テーブル定義のほかに結果セットに対して使用することもできます。
これは、最適化されたテーブルを作る際に便利です。
tableInfo() メソッドのパラメータには、
結果をどのように表すかを指定するためのモードを渡すことができます。
結果がどのようになるのかをよりわかりやすくするため、
同じクエリを使用して結果を異なるモードで出力する一連の例をごらんいただきます。
注意: 最初のパラメータには、テーブルあるいは結果セットのいずれかを指定して情報を取得することができます。
これらの例では、先ほど定義したテーブルを使用します。
例 39-4tableinfo() の使用例 1 <?php
// デフォルトのモード - NULL
$tableInfo = $mdb2->tableInfo($table, NULL);
var_dump($tableInfo);
// 結果は、このようになります
array(3) {
[0] => array(11) {
['notnull'] => bool(true)
['nativetype'] => string(3) "int"
['length'] => int(4)
['unsigned'] => int(1)
['default'] => string(0) ""
['autoincrement'] => bool(true)
['type'] => string(3) "int"
['mdb2type'] => string(7) "integer"
['name'] => string(2) "id"
['table'] => string(9) "sometable"
['flags'] => string(29) "primary_key not_null unsigned"
}
[1] => array(10) {
['notnull'] => bool(false)
['nativetype'] => string(7) "varchar"
['length'] => string(2) "12"
['fixed'] => bool(false)
['default'] => NULL
['type'] => string(7) "varchar"
['mdb2type'] => string(4) "text"
['name'] => string(8) "somename"
['table'] => string(9) "sometable"
['flags'] => string(0) ""
}
[2] => array(8) {
['notnull'] => bool(false)
['nativetype'] => string(4) "date"
['default'] => NULL
['type'] => string(4) "date"
['mdb2type'] => string(4) "date"
['name'] => string(8) "somedate"
['table'] => string(9) "sometable"
['flags'] => string(0) ""
}
}
?> |
|
これ以降の例では、最初のテーブルフィールドの定義のみを含めます。
モードごとの違いを示すには、それで十分だからです。
さあ、ではモードを
MDB2_TABLEINFO_ORDER に変更してみましょう。
デフォルトの出力で得られた情報に加えて、カラム数についての情報が
num_fields 要素で返されます。また、order
要素の配列の構造は、キーがカラム名、値がそのカラムのインデックス
(デフォルトの出力のキーに対応します) となります。
例 39-5tableinfo() の使用例 2 <?php
$tableInfo = $mdb2->tableInfo($table, MDB2_TABLEINFO_ORDER);
var_dump($tableInfo);
array(5) {
['num_fields'] => int(3)
[0] => array(11) {
['notnull'] => bool(true)
['nativetype'] => string(3) "int"
['length'] => int(4)
['unsigned'] => int(1)
['default'] => string(0) ""
['autoincrement'] => bool(true)
['type'] => string(3) "int"
['mdb2type'] => string(7) "integer"
['name'] => string(2) "id"
['table'] => string(9) "sometable"
['flags'] => string(29) "primary_key not_null unsigned"
}
[1] => array(10) {
['notnull'] => bool(false)
['nativetype'] => string(7) "varchar"
['length'] => string(2) "12"
['fixed'] => bool(false)
['default'] => NULL
['type'] => string(7) "varchar"
['mdb2type'] => string(4) "text"
['name'] => string(8) "somename"
['table'] => string(9) "sometable"
['flags'] => string(0) ""
}
[2] => array(8) {
['notnull'] => bool(false)
['nativetype'] => string(4) "date"
['default'] => NULL
['type'] => string(4) "date"
['mdb2type'] => string(4) "date"
['name'] => string(8) "somedate"
['table'] => string(9) "sometable"
['flags'] => string(0) ""
}
['order'] => array(3) {
['id'] => int(0)
['somename'] => int(1)
['somedate'] => int(2)
}
}
?> |
|
モードを
MDB2_TABLEINFO_ORDERTABLE に変更すると、
さらに情報が追加されます。返り値の配列の次元数がひとつ多くなり、
テーブル名をキー、そのフィールド名をサブキーとする構成になります。
この型のクエリが有用なのは、たとえば複雑な結合を行っており、
同名のフィールドが複数ある場合などです。
注意: flags 要素には、フィールドに関する付加情報が
スペース区切りの一覧で含まれます。この内容には、DBMS 間での一貫性はありません。
それぞれの DBMS に依存し、次のような内容になります。
primary_key
unique_key
multiple_key
not_null
unsigned
大半の DBMS では、結果がテーブル名の場合は
table および
flags
しか返しません。
オプション
portability が
MDB2_PORTABILITY_FIX_CASE
に設定されている場合は、テーブルおよびフィールドの名前は小文字あるいは大文字に変換されます。
CASE_UPPER の場合は、すべてのテーブルおよびフィールドは大文字に変換されます。
これは Oracle や Firebird/Interbase と同じ挙動です。一方、
CASE_LOWER の場合はすべてのテーブルおよびフィールドを小文字に変換します。
これがデフォルトの設定です。