適材適所

PowerShellを中心にプログラミングやシステム管理の備忘録的なブログ

【db2_columns】DB2からカラム名を取得する【PHP,DB2 for i】

DB2 for i 上のPHPサーバーでdb2_columns関数を使う機会があったので、そのときの備忘録です。

db2_columns関数とは

テーブルのカラムおよび関連するメタデータを含む結果セットを返す 『PHP: db2_columns - Manual

PHPを使ってDB2上のテーブルの情報を得ることができます。

基本的な使い方

構文は次の通りとなっています。

db2_columns(
resource $connection,
string $qualifier = ?,
string $schema = ?,
string $table-name = ?,
string $column-name = ?
): resource

$connectionはdb2_connectあたりで作成したDB2との接続を渡します。

$qualifierはi OS上のPHPサーバーなら、空文字(若しくはnull)を渡します。

$schemaはスキーマが複数ある場合に特定するために使用します。私の環境だと1つしか用意していなかったので、全てのスキーマに一致させる'%'を渡しました。

$table-nameはカラム名を取得したいテーブル名を渡します。

$column-nameは取得したいカラム名を絞りたいときに使うようですが、私は使うことがありませんでした。ちなみに私が実験したところ大文字小文字ありです。特に絞ることがない場合は、'%'を渡します。

上記をまとめると、基本的には下記のような指定になるかと思います。

$stmt=db2_columns($connection,'','%','テーブル名','%');

カラム名を取得するには

カラム名を取得するには、次のようにします。

 
$stmt=db2_columns($connection,'','%','テーブル名','%');
while ($row = db2_fetch_array($stmt)) {
   echo $row[3];
}

$row[3]のインデックス3が完全にマジックナンバーと化しています。

てっきり、$row['COLUMN_NAME']のように取得できると思ったら、うまく取得できず最終的に上記のようになりました。

IBMの公式(PHP でのデータベース・メタデータ取得関数 (ibm_db2))にあるコードでも思いっきりインデックスを指定してマジックナンバーとなっているのでこれでよしとしましょう。

以上、db2_columnsの使い方についての備忘録でした。

参考

PHP: db2_columns - Manual
PHP でのデータベース・メタデータ取得関数 (ibm_db2)