DB2PHP连接

DB2PHP连接,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(

我已经挖了好几天了。需要使用PHP连接到DB2数据库。下面的代码不会返回错误消息或任何有用的信息,而是在页面的后面打断Javascript

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相媲美的吗?很好的信息,但对我的场景没有太大帮助。谢谢你,迪利普!很好的信息,但对我的场景没有太大帮助。谢谢你,迪利普!