PHP でのデータベース・メタデータ取得関数 (ibm_db2)
ibm_db2 API の関数を使用して、 Db2®、 IBM® Cloudscape、および Db2 Connect、 Db2 for z/OS® および Db2 for iによって提供されるデータベースのメタデータを取得できます。
アプリケーションのクラス (管理インターフェースなど) によっては、任意のデータベースに含まれる構造および SQL オブジェクトを動的に反映する必要があるものがあります。 データベースに関するメタデータを取得する 1 つの方法は、システム・カタログ表に対して SELECT ステートメントを直接発行することです。ただし、システム・カタログ表のスキーマが Db2のバージョン間で変更されたり、 Db2 上のシステム・カタログ表のスキーマが Db2 for z/OS上のシステム・カタログ表のスキーマと異なる場合があります。 これらの相違点をアプリケーション・コードで保守することに多大の労力を費やす代わりに、ibm_db2 拡張モジュールに含まれる PHP 関数を使用して、データベース・メタデータを取得することができます。
これらの関数を呼び出す前に、PHP 環境をセットアップする必要があり、db2_connect または db2_pconnect 関数によって戻される接続リソースを持っている必要があります。
関数 | 説明 |
---|---|
db2_client_info | IBM データ・サーバー・クライアントに関する情報を含む読み取り専用オブジェクトを戻します。 |
db2_column_privileges | 表の列および関連する特権をリストする結果セットを戻します |
db2_columns | 表の列および関連するメタデータをリストする結果セットを戻します |
db2_foreign_keys | 表の外部キーをリストする結果セットを戻します |
db2_primary_keys | 表の主キーをリストする結果セットを戻します |
db2_procedure_columns | 1 つ以上のストアード・プロシージャーのパラメーターをリストする結果セットを戻します |
db2_procedures | データベースに登録されたストアード・プロシージャーをリストする結果セットを戻します |
db2_server_info | データベース管理システム・ソフトウェアと構成に関する情報を含む読み取り専用オブジェクトを戻します |
db2_special_columns | 表の固有の行 ID をリストする結果セットを戻します |
db2_statistics | 表の索引と統計をリストする結果セットを戻します |
db2_table_privileges | データベース内の表および関連する特権をリストする結果セットを戻します |
ほとんどの ibm_db2 データベース・メタデータ取得関数によって戻される結果セットには、関数ごとに定義された列が含まれています。 結果セットから行を取得するには、この目的のための ibm_db2 関数を使用してください。
db2_client_info および db2_server_info 関数は、読み取り専用プロパティーを持つ単一のオブジェクトを直接戻します。 これらのオブジェクトのプロパティーを使用して、接続先のデータベース管理システムに応じて様々な仕方で動作するアプリケーションを作成できます。 例えば、ibm_db2 拡張モジュールで構築された Web ベースのデータベース管理アプリケーションは、考えられるすべてのデータベース管理システムについて最小公分母の限度をエンコードするのではなく、db2_server_info()->MAX_COL_NAME_LEN
プロパティーを使用して、接続先のデータベース管理システムでの列名の最大長に対応する最大長を持つ命名列のテキスト・フィールドを動的に表示できます。
ibm_db2 API について詳しくは、 http://www.php.net/docs.phpを参照してください。
例
例 1: 表の列および関連する特権のリストを表示する
<?php
$conn = db2_connect('sample', 'db2inst1', 'ibmdb2');
if ($conn) {
$stmt = db2_column_privileges($conn, NULL, NULL, 'DEPARTMENT');
$row = db2_fetch_array($stmt);
print $row[2] . "\n";
print $row[3] . "\n";
print $row[7];
db2_close($conn);
}
else {
echo db2_conn_errormsg();
printf("Connection failed\n\n");
}
?>
例 2: 表の主キーのリストを表示する
<?php
$conn = db2_connect('sample', 'db2inst1', 'ibmdb2');
if ($conn) {
$stmt = db2_primary_keys($conn, NULL, NULL, 'DEPARTMENT');
while ($row = db2_fetch_array($stmt)) {
echo "TABLE_NAME:\t" . $row[2] . "\n";
echo "COLUMN_NAME:\t" . $row[3] . "\n";
echo "KEY_SEQ:\t" . $row[4] . "\n";
}
db2_close($conn);
}
else {
echo db2_conn_errormsg();
printf("Connection failed\n\n");
}
?>
例 3: 1 つ以上のストアード・プロシージャーのパラメーターのリストを表示する
<?php
$conn = db2_connect('sample', 'db2inst1', 'ibmdb2');
if ($conn) {
$stmt = db2_procedures($conn, NULL, 'SYS%', '%%');
$row = db2_fetch_assoc($stmt);
var_dump($row);
db2_close($conn);
}
else {
echo "Connection failed.\n";
}
?>
例 4: 表の索引と統計のリストを表示する
<?php
$conn = db2_connect('sample', 'db2inst1', 'ibmdb2');
if ($conn) {
echo "Test DEPARTMENT table:\n";
$result = db2_statistics($conn, NULL, NULL, "EMPLOYEE", 1);
while ($row = db2_fetch_assoc($result)) {
var_dump($row);
}
echo "Test non-existent table:\n";
$result = db2_statistics($conn,NULL,NULL,"NON_EXISTENT_TABLE",1);
$row = db2_fetch_array($result);
if ($row) {
echo "Non-Empty\n";
} else {
echo "Empty\n";
}
db2_close($conn);
}
else {
echo 'no connection: ' . db2_conn_errormsg();
}
?>
例 5: データベース内の表および関連する特権のリストを表示する
<?php
$conn = db2_connect('sample', 'db2inst1', 'ibmdb2');
if ($conn) {
$stmt = db2_table_privileges($conn, NULL, "%%", "DEPARTMENT");
while ($row = db2_fetch_assoc($stmt)) {
var_dump($row);
}
db2_close($conn);
}
else {
echo db2_conn_errormsg();
printf("Connection failed\n\n");
}
?>