我正在尝试通过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。 希望你能帮忙。
感谢您的回复!
答案 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;
答案 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名称。