Zend Core For IBM のphpからDB2 9.5にdb2_connectで接続時にこける件

Zend Core For IBM 2.0.3を使ってるとDB2 9.5への接続がどうもおかしくなります。
こんなエラーがでます。。
[IBM][CLI Driver] SQL1042C An unexpected system error occurred. SQLSTATE=58004 SQLCODE=-1042


原因はZend Core For IBM 2.0.3が持っている「libdb2.so.1」がどうも怪しいようですので
DB2エンジンかDB2クライアント付属のlibdb2.so.1を使うようにしましょう。


接続がコケるサーバではたぶんこんな感じなので
# ll /usr/local/Zend/Core/lib/libdb2.so.1

  • rwxr-xr-x 1 3800 7777 18004739 2月 11 2007 /usr/local/Zend/Core/lib/libdb2.so.1


libdb2.so.1をいったん退避させて
# mv /usr/local/Zend/Core/lib/libdb2.so.1 /usr/local/Zend/Core/lib/libdb2.so.1_old
シンボリックリンクを張り、
# ln -s /opt/ibm/db2/V9.5/lib32/libdb2.so.1 /usr/local/Zend/Core/lib/libdb2.so.1
apacheを再起動
# /usr/local/Zend/apache2/bin/apachectl stop
# /usr/local/Zend/apache2/bin/apachectl start


64ビット機はシンボリックリンクを張るときは
# ln -s /opt/ibm/db2/V9.5/lib64/libdb2.so.1 /usr/local/Zend/Core/lib/libdb2.so.1
ですね。


Zend Core For IBM 1.5系やapacheを別口で入れた場合、
ZendCoreのインストーラーでドライバーをインストールしなかった場合は
多分大丈夫です。
ちなみに上記の対応例やZend Core For IBM 1.5系のように
ライブラリにシンボリックリンクを張っていると
DB2マイグレーションした場合やDB2クライアントを入れ替えた場合は
ライブラリのシンボリックリンクの張替えを忘れずに・・
(自分は忘れてました(w)