ushidayの日記

主に「IBMi」のメモに・・・

PDOでハマル

新しく”Zend Core i5”を入れ替えたので、PDOを試してみたら、しょーもない事でハマッたのでメモを残します。
IBMDB2用のドライバは、”pdo_ibm.so”のextesionが、php.iniで有効になっていれば使えます。
でもって、RedBookとか、関数リファレンスに使い方が、あるので、その通りやってみると上手くいかない。
(※一生懸命英語のRedBookを読んだのにー...orz)

関数リファレンスより

■説明
PDO_IBM のデータソース名 (DSN) は、IBM CLI DSN にもとづいています。 PDO_IBM DSN は、主に以下の部分から構成されます。

DSN プレフィックス
DSN プレフィックスibm: です。
DSN
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