现在正在挖掘stackoverflow几天了。需要使用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>";
}
答案 0 :(得分:2)
答案 1 :(得分:2)
我的想法是你的驱动程序名称与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 Driver” - 无论您放在方括号[]之间。
现在我的PHP代码如下所示:
$this->db_connection = new PDO("odbc:DRIVER={iSeries Access ODBC Driver};SYSTEM=$this->he_database_server;PROTOCOL=TCPIP", $temp_username, $temp_password);
因此,请检查以确保您的odbcinst.ini文件中的驱动程序名称(IBM db2 odbc DRIVER)相同。
现在,如果这不能解决问题,我建议您通过在odbcinst.ini文件中添加以下内容来启用ODBC日志记录:
[ODBC]
TraceFile = /tmp/odbc.log
Trace = Yes
这会将大量信息写入日志文件,并让您清楚地知道出了什么问题。如果仍然没有使它工作,我唯一的其他建议是最基本的事情:确保用户名/密码是正确的,AS / 400可以从运行PHP的服务器等访问。