PDOでハマル
新しく”Zend Core i5”を入れ替えたので、PDOを試してみたら、しょーもない事でハマッたのでメモを残します。
IBMのDB2用のドライバは、”pdo_ibm.so”のextesionが、php.iniで有効になっていれば使えます。
でもって、RedBookとか、関数リファレンスに使い方が、あるので、その通りやってみると上手くいかない。
(※一生懸命英語のRedBookを読んだのにー...orz)
関数リファレンスより
■説明
PDO_IBM のデータソース名 (DSN) は、IBM CLI DSN にもとづいています。 PDO_IBM DSN は、主に以下の部分から構成されます。
a) db2cli.ini あるいは odbc.ini を使用したデータソースの設定
b) カタログされたデータベース名、つまり、 DB2 クライアントにおけるデータベースエイリアス
c) 完全な接続文字列。次のような形式になります。 DRIVER={IBM DB2 ODBC DRIVER};DATABASE=database;HOSTNAME=hostname ;PORT=port ;PROTOCOL=TCPIP;UID=username ;PWD=password ; 各パラメータは次の内容を表します。
- database
- データベースの名前。
- hostname
- データベースサーバのホスト名あるいは IP アドレス。
- port
- データベースが要求を待ち受けている TCP/IP ポート。
- username
- データベースに接続する際のユーザ名。
- password
- データベースに接続する際のパスワード。
■使用例
$db = new PDO("ibm:DRIVER={IBM DB2 ODBC DRIVER};DATABASE=testdb;" .
"HOSTNAME=11.22.33.444;PORT=56789;PROTOCOL=TCPIP;", "testuser", "tespass");
と記載してあるので、こんな感じでやってみると
$db = new PDO("ibm:DRIVER={IBM DB2 ODBC DRIVER};DATABASE=ライブラリ名;" .
"HOSTNAME=localhost;PORT=56789;PROTOCOL=TCPIP;", "foo", "*****");
string(180) "SQLSTATE=42705, SQLConnect: -950 リレーショナル・データベースDRIVER={IBM DB2 ODがリレーショナル・データベース・ディレクトリーの中にない。"
と来た。RedBookの解説もDriverの部分が”DSN=”になってるぐらいで、結果的には同じでした。
PDO自体が駄目な可能性もあると思い、MySQLを繋いでみると、そっちはOK。
エラーをよく見ると光明が...
でもこのエラーよく見ると「リレーショナル・データベースDRIVER={IBM DB2 OD」の部分は途切れていて、どうも長いDSNの文字列を認識しようという腹はなさそう。明らかにその名前だけで、データベースを認識しようとしている?
もしや...。”*LOCAL”か”システム名”?と思い、やってみると、ドンピシャでした。システム名はDSPNETAで確認出来ます。
なんだか、その間に色々調べて遠回りしちゃいました。トホホ...
じゃあホストのIPや、ポートの情報はどしてるの?という事で、それは”WRKRDBDIRE”で登録しておくのでした。
■WRKRDBDIRE
リレーショナル・データベース・ディレクトリー 項目の処理 位置指定 . . . . . . . . オプションを入力して,実行キーを押してください。 1= 追加 2= 変更 4= 除去 5= 明細の表示 6= 明細の印刷 リモート OPT 項目 ロケーション テキスト システム名 *LOCAL ※OPT = 5で詳細 --------------------------------------------------------------- リレーショナル・データベース項目明細の表示 リレーショナル・データベース . . : システム名 リモート・ロケーション : リモート・ロケーション . . . . : *LOCAL タイプ . . . . . . . . . . . : *IP ポート番号またはサービス名 . . : *DRDA リモート認証方式 : 所望の方式 . . . . . . . . . : *ENCRYPTED 低い認証の許可 . . . . . . . : *ALWLOWER テキスト . . . . . . . . . . . . : リレーショナル・データベース・タ イプ . . . . . . . . . . . . . : *LOCAL