DB2PHP连接
我已经挖了好几天了。需要使用PHP连接到DB2数据库。下面的代码不会返回错误消息或任何有用的信息,而是在页面的后面打断JavascriptDB2PHP连接,php,db2,ibm-midrange,Php,Db2,Ibm Midrange,我已经挖了好几天了。需要使用PHP连接到DB2数据库。下面的代码不会返回错误消息或任何有用的信息,而是在页面的后面打断Javascript include(TEMPLATEPATH.'/inc/library/adodb_lite/adodb.inc.php'); $DBName = 'DBNAME'; $Host = 'IPADDRESS'; $User = 'USER'; $Password = 'PASS'; $db = ADONewConnection(
include(TEMPLATEPATH.'/inc/library/adodb_lite/adodb.inc.php');
$DBName = 'DBNAME';
$Host = 'IPADDRESS';
$User = 'USER';
$Password = 'PASS';
$db = ADONewConnection('db2');
$dsn = "driver={IBM db2 odbc DRIVER};Database=$DBName;hostname=$Host;protocol=TCPIP;uid=$User;pwd=$Password";
if ($db->Connect($dsn)) {
echo "<div style='color:green;font-size:21px;'>Connection Successful.</div>";
} else {
echo "<div style='color:#cc0000;font-size:21px;'>Connection Failed db->Connect(dsn)</div>";
echo 'SQLSTATE: '.$db->ErrorNo()."<br>";
echo 'Message: '.$db->ErrorMsg()."<br>";
}
include(TEMPLATEPATH./inc/library/adodb_lite/adodb.inc.php');
$DBName='DBName';
$Host='IPADDRESS';
$User='User';
$Password='PASS';
$db=adonnewconnection('db2');
$dsn=“driver={IBM db2 odbc driver};数据库=$DBName;主机名=$Host;协议=TCPIP;uid=$User;pwd=$Password”;
如果($db->Connect($dsn)){
echo“连接成功。”;
}否则{
echo“连接失败数据库->连接(dsn)”;
回显'SQLSTATE:'。$db->ErrorNo()。“
”;
回显“消息:”。$db->ErrorMsg()。“
”;
}
然后是尝试使用此
尝试使用此
我的想法是,您的驱动程序名称与odbcinst.ini文件中的名称不匹配。以下是我正在使用的: odbcinst.ini
[iSeries Access ODBC Driver]
Description = iSeries Access for Linux ODBC Driver
Driver = /usr/lib/libcwbodbc.so
Setup = /usr/lib/libcwbodbcs.so
NOTE1 = If using unixODBC 2.2.11 or later and you want the 32 and 64-bit ODBC drivers to share DSN's,
NOTE2 = the following Driver64/Setup64 keywords will provide that support.
Driver64 = /usr/lib/lib64/libcwbodbc.so
Setup64 = /usr/lib/lib64/libcwbodbcs.so
Threading = 2
DontDLClose = 1
UsageCount = 1
请注意,此驱动程序的“名称”定义为“iSeries Access ODBC驱动程序”-无论您将其置于括号[]之间
现在,我的PHP代码如下所示:
$this->db_connection = new PDO("odbc:DRIVER={iSeries Access ODBC Driver};SYSTEM=$this->he_database_server;PROTOCOL=TCPIP", $temp_username, $temp_password);
因此,请检查以确保您的驱动程序名称(IBM db2 odbc驱动程序)在odbcinst.ini文件中相同
现在,如果这不能解决问题,我建议您通过将以下内容添加到odbcinst.ini文件来打开ODBC日志记录:
[ODBC]
TraceFile = /tmp/odbc.log
Trace = Yes
这会将大量信息写入日志文件,让您很好地了解问题所在。如果仍然无法使用,我唯一的其他建议是最基本的:确保用户名/密码正确,可以从运行PHP的服务器访问AS/400,等等。我认为您的驱动程序名与odbcinst.ini文件中的驱动程序名不匹配。以下是我正在使用的: odbcinst.ini
[iSeries Access ODBC Driver]
Description = iSeries Access for Linux ODBC Driver
Driver = /usr/lib/libcwbodbc.so
Setup = /usr/lib/libcwbodbcs.so
NOTE1 = If using unixODBC 2.2.11 or later and you want the 32 and 64-bit ODBC drivers to share DSN's,
NOTE2 = the following Driver64/Setup64 keywords will provide that support.
Driver64 = /usr/lib/lib64/libcwbodbc.so
Setup64 = /usr/lib/lib64/libcwbodbcs.so
Threading = 2
DontDLClose = 1
UsageCount = 1
请注意,此驱动程序的“名称”定义为“iSeries Access ODBC驱动程序”-无论您将其置于括号[]之间
现在,我的PHP代码如下所示:
$this->db_connection = new PDO("odbc:DRIVER={iSeries Access ODBC Driver};SYSTEM=$this->he_database_server;PROTOCOL=TCPIP", $temp_username, $temp_password);
因此,请检查以确保您的驱动程序名称(IBM db2 odbc驱动程序)在odbcinst.ini文件中相同
现在,如果这不能解决问题,我建议您通过将以下内容添加到odbcinst.ini文件来打开ODBC日志记录:
[ODBC]
TraceFile = /tmp/odbc.log
Trace = Yes
这会将大量信息写入日志文件,让您很好地了解问题所在。如果这仍然不起作用,我唯一的其他建议是最基本的:确保用户名/密码正确,运行PHP的服务器可以访问AS/400,等等。你可以在这个线程中找到解决方案:就像我说的,我一直在stackoverflow上,阅读相关标签。不幸的是,与那个线程不同,我并没有看到任何错误消息或有用的信息。你们可以在这个线程中找到解决方案:就像我说的,我一直在stackoverflow上,阅读相关的标签。不幸的是,与该线程不同,我没有看到任何错误消息或有用的信息。我确信我忽略了一些重要的信息,比如odbcinst.ini。我使用的是adodb_lite,虽然我安装了iSeries ODBC驱动程序,但没有看到odbcinst.ini(IBM/DB2 newb)。odbcinst.ini文件将在安装ODBC时安装
sudo apt get install unixodbc php5 odbc
在Ubuntu上,它会将odbc.ini和odbcinst.ini放在/etc中。当我安装iSeries驱动程序时,我也必须这样做:sudo cp/opt/ibm/iSeries访问/lib/*/usr/lib
才能在odbc期望的位置获取.so文件。您是否尝试过转到命令行并使用isql命令查看是否可以连接到AS/400?尝试过从(per)从IBM下载DB2 ODBC驱动程序,但一旦完成并提取,就没有odbcinst.ini了。我下载了错误的软件包吗?我从下载了驱动程序(你需要在他们的网站上有一个帐户才能下载驱动程序)。这是一个RPM,因此我使用“alien”将其转换为Ubuntu的DEB包:sudo alien iSeries Access-6.1.0-1.2.i386.RPM。不过,为了回答您的问题,odbc.ini和ocbcinst.ini文件将在您安装unixodbc时安装(您还需要Ubuntu上的php5 odbc包,以便PHP可以使用odbc)。感谢您的帮助Benny。该站点和连接DB2的服务器都位于使用PHP5.3.8的Windows服务器上。有什么东西可以和unixodbc相媲美吗?我确信我忽略了一些重要的东西,比如odbcinst.ini。我使用的是adodb_lite,虽然我安装了iSeries ODBC驱动程序,但没有看到odbcinst.ini(IBM/DB2 newb)。odbcinst.ini文件将在安装ODBC时安装sudo apt get install unixodbc php5 odbc
在Ubuntu上,它会将odbc.ini和odbcinst.ini放在/etc中。当我安装iSeries驱动程序时,我也必须这样做:sudo cp/opt/ibm/iSeries访问/lib/*/usr/lib
才能在odbc期望的位置获取.so文件。您是否尝试过转到命令行并使用isql命令查看是否可以连接到AS/400?尝试过从(per)从IBM下载DB2 ODBC驱动程序,但一旦完成并提取,就没有odbcinst.ini了。我下载了错误的软件包吗?我从下载了驱动程序(你需要在他们的网站上有一个帐户才能下载驱动程序)。这是一个RPM,因此我使用“alien”将其转换为Ubuntu的DEB包:sudo alien iSeries Access-6.1.0-1.2.i386.RPM。不过,为了回答您的问题,odbc.ini和ocbcinst.ini文件将在您安装unixodbc时安装(您还需要Ubuntu上的php5 odbc包,以便PHP可以使用odbc)。感谢您的帮助Benny。该站点和连接DB2的服务器都位于使用PHP5.3.8的Windows服务器上。有什么可以和unixodbc相媲美的吗?很好的信息,但对我的场景没有太大帮助。谢谢你,迪利普!很好的信息,但对我的场景没有太大帮助。谢谢你,迪利普!