DB2连接失败了php

时间:2013-04-23 08:49:04

标签: php db2

我正在尝试通过PHP连接到远程DB2。但是有一些问题。我已经安装了IBM Application开发人员客户端。

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。这就是我猜这个问题就在这一方面的原因。但即便如此,我也无法解决它。

很抱歉,如果我在stackoverflow上复制了一些问题,但我找到的所有答案对我来说都是无用的。

我正在使用Apache 2.2和PHP 5.4。 希望你能帮忙。

感谢您的回复!

3 个答案:

答案 0 :(得分: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驱动程序,并且必须在本地配置。

答案 1 :(得分:0)

您的连接字符串看起来像ODBC连接,而PHP中的db2_connect函数需要: -

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

它位于PHP web page.

答案 2 :(得分: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名称。