0

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

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。希望你能帮忙。

感谢您的回复!

4

3 回答 3

1

你确定你有连接到服务器吗?端口、服务器、防火墙规则、用户名、密码、数据库名称是否正确?

您收到的 SQL 代码是什么。尝试从 PHP 获取 SQL 代码,“连接到 xx 失败”是您自己的代码,因此无法帮助您。

您是否安装了应用程序开发客户端?您使用的是哪个 DB2 版本?ADCL 是旧的,用于 DB2 8。从 DB2 9.7 开始,客户端有不同的名称,我认为您需要 IBM 数据服务器客户端才能编译 php 模块。有关更多信息,请查看此网站:http ://www-01.ibm.com/support/docview.wss?uid=swg27016878

我认为您必须使用 db2 客户端对数据库服务器(节点)和本地计算机中的数据库进行编目。您的 PHP 代码似乎使用了 ODBC 驱动程序,并且必须在本地进行配置。

于 2013-04-23T10:11:11.450 回答
0

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

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

它在PHP 网页上。

于 2013-04-29T13:00:23.417 回答
0

我从来没有让 ibm_db2 或 pdo_ibm 在遥控器上工作。如果 DB2 和 Apache 在同一台机器上(如 iSeries),它们就可以工作,但如果主机连接到远程 DB2 就不行。

如果您阅读每个的 Doctrine2 PHP 驱动程序,您会发现如果主机不是“localhost”或“127.0.0.1”,它们会重定向到 ODBC。

这段代码对我有用

<?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 名称。

于 2014-09-30T00:31:46.120 回答