繁体   English   中英

DB2连接失败php

[英]DB2 connection failed php

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

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。 希望能对您有所帮助。

感谢您的任何答复!

您确定可以连接到服务器吗? 正确的端口,服务器,防火墙规则,用户名,密码,数据库名称?

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

您是否安装了应用程序开发客户端? 您正在使用哪个DB2版本? ADCL很旧,适用于DB28。由于DB2 9.7的不同,客户端具有不同的名称,我认为您需要IBM Data Server客户端才能编译php模块。 有关更多信息,请访问以下网站: http : //www-01.ibm.com/support/docview.wss?uid=swg27016878

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

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

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

PHP网页上。

我从来没有能够使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名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM