DB2接続設定 - PHP実行環境改変メモ(3)
引き続き、自宅のPCのPHP環境の改変。
- PHP実行環境構築メモ - HHeLiBeXの日記 正道編
- PHP実行環境改変メモ - HHeLiBeXの日記 正道編
- MySQL接続設定 - PHP実行環境改変メモ(2) - HHeLiBeXの日記 正道編
ためしにDB2に接続してみる
以前に、PHPのWindows版バイナリがあるということをブログで見た記憶がよみがえってきたので、まずはその記事を探し出すことから始めた。
- PHP-DB2 ドライバのWindowsバイナリ | Unofficial DB2 BLOG
- DB2 9.5小ネタ - phpとrailsのドライバが同梱されるようになった | Unofficial DB2 BLOG
前者の記事からいろいろと辿って試してみたのだが、うまくいかず‥Apache httpdのエラーログに次のようなエラーが出ていた。
PHP Warning: PHP Startup: ibm_db2: Unable to initialize module\nModule compiled with module API=20060613\nPHP compiled with module API=20090626\nThese options need to match\n in Unknown on line 0 <br /> <b>Warning</b>: PHP Startup: ibm_db2: Unable to initialize module Module compiled with module API=20060613 PHP compiled with module API=20090626 These options need to match in <b>Unknown</b> on line <b>0</b><br />
後で気づいたのだが、どうもこのモジュールはPHP 5.2以前の何か(何)用のものなのではないかと。自分の環境はPHP 5.3。
どうせ使っているDB2のバージョンはv9.7がメインだし、ということで後者の記事を参考に試してみることにした。
私のPCには、DB2 Express-C v9.1/9.5/9.7が同居しているのだが、それぞれの"dsdriver\php"ディレクトリを見ると次のようなファイルがある。
v9.7にはREADMEが入っていたので、まずそっちを読んでみると、最新版を入手することを推奨している。自分の環境がPHP 5.3であることもあるので、記載内容にしたがって、次のサイトからPHP 5.3用のDB2 PHPドライバを入手。
自分の環境のPHPがVC6版なので、"php_ibm_db2-1.9.0-5.3-ts-vc6-x86.zip"をダウンロード。解凍して得られる"php_ibm_db2.dll"をextension_dirに設定した"C:\PHP\php-5.3.3-Win32-VC6-x86\ext"に配置する。
続いて、"php.ini"の適当なところに次の行を追加する。
extension=php_ibm_db2.dll
その後、Apache httpdを再起動する。phpinfo()を見てみてibm_db2の項があればOK。
確認のため、次のようなPHPスクリプトを実行してみる。
<pre><?php // $db2 = db2_connect( // 'DRIVER={IBM DB2 ODBC DRIVER};' // . 'DATABASE=sandbox;' // . 'HOSTNAME=localhost;' // . 'PORT=50002;' // . 'PROTOCOL=TCPIP;' // . 'UID=db2admin;' // . 'PWD=admin;', // '', // ''); $db2 = db2_connect( 'sandbox', 'db2admin', 'admin'); $schema = 'SYSIBM'; $table = 'TABLES'; $query = "select table_schema, table_name, column_name" . " from SYSIBM.columns" . " where table_schema = ?" . " and table_name = ?" . " order by ordinal_position"; $stmt = db2_prepare($db2, $query); $success = db2_execute($stmt, array($schema, $table)); while (($row = db2_fetch_assoc($stmt))) { print_r($row); } db2_close($db2); ?></pre>
正常に実行されれば、SYSIBM.TABLES表の列名が出力されるはず。
ちなみに、db2_connect()を呼び出している部分だが、自分の環境では"sandbox"というデータベースをカタログしているので上記のままで動作する。一方、データベースをカタログしていない場合は、上記のコメントアウトしている部分のように書くとよいらしい。