2013-04-23 117 views
0

我試圖通過PHP連接到遠程DB2。但有一些問題。我已經安裝了IBM Application開發人員客戶端。DB2連接失敗php

的phpinfo()輸出:

 

    
     IBM DB2, Cloudscape and Apache Derby support enabled 
     Module release 1.9.4 
     Module revision $Revision: 327944 $ 
     Binary data mode (ibm_db2.binmode) DB2_BINARY 
 

然後,我有它看起來像一個php文件:

 

    
     $database = 'MyDB'; 
     $user = 'db2inst1'; 
     $password = 'mypassword'; 
     $hostname = '1.1.1.1'; 
     $port = 50000; 

     $conn_string = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;PORT=$port;HOSTNAME=$hostname;". 
     "PROTOCOL=TCPIP;UID=$user;PWD=$password;"; 

     $conn = db2_connect($conn_string, '', ''); 
     if ($conn) { 
      echo "connection to $database succeeded"; 
     } else { 
      echo "connection to $database failed"; 
      echo db2_conn_errormsg(); 
     } 
 

,並試圖執行這個文件,我有「連接MYDB失敗」,並從db2_conn_errormsg沒有明顯的反應(),這實際上是讓我百思不得其解

不幸的是,我還沒有得到直通道與數據庫的遠程服務器。但幾個月前,當我使用其他客戶端時,我成功連接到了這個數據庫。但是那段時間我不需要安裝IBM ADCL。這就是爲什麼我可以猜測這個問題在這方面。但即使如此,我無法修復它。

很抱歉,如果我重複的計算器一些問題,但所有的答案,我發現,是不幸的是對我沒用。

我使用的Apache 2.2和PHP 5.4。 希望你能幫上忙。

感謝您的回覆!

回答

1

你確定你有連接到服務器?正確的端口,服務器,防火牆規則,用戶名,密碼,數據庫名稱?

什麼是您收到的SQL代碼。嘗試從PHP獲取SQL代碼,「連接到xx失敗」是您自己的代碼,因此無法幫助您。

是否安裝了應用程序開發的客戶端?您正在使用哪個DB2版本? ADCL是舊的,它是針對DB2 8的。從DB2 9.7開始,客戶端具有不同的名稱,我認爲您需要IBM Data Server客戶端才能編譯php模塊。欲瞭解更多信息,請查看以下網站:http://www-01.ibm.com/support/docview.wss?uid=swg27016878

我認爲您必須使用db2客戶端對本地計算機中的數據庫服務器(節點)和數據庫進行編目。看起來您的PHP代碼使用ODBC驅動程序,並且必須在本地進行配置。

0

連接字符串的樣子,其中作爲在PHP中db2_connect功能需要一個ODBC連接: -

DATABASE=database;HOSTNAME=hostname;PORT=port;PROTOCOL=TCPIP;UID=username;PWD=password; 

這是對PHP web page.

0

我從來沒有能夠得到IBM_DB2或pdo_ibm工作的一個遠程。如果DB2和Apache位於同一臺計算機上(如iSeries),但它們在主機連接到遠程DB2時則不起作用。

如果你讀每個Doctrine2 PHP驅動程序,你會發現他們重定向到ODBC如果主機不是「本地主機」或「127.0.0.1」。

此代碼對我的作品

<?php 
if (!$db = odbc_connect ("AS400", $user, $password)) 
    echo 'error!'; 

$result = odbc_exec($db, "select count(*) from $table"); 
while (odbc_fetch_row($result)) { 
    var_dump($result); 
    print_r($result); 
    echo "\n"; 
    echo odbc_result($result, 1)."\n"; 
} 

odbc_close($db); 

AS400是ODBC定義DSN名。