我试图在Windows 7(64位)上获得PDO连接(php 5.4)以连接到 iSeries IBM AS / 400。我的最终目标是使用使用PDO的Yii2。
对于PDO驱动程序兼容性,我使用php5.4,因为php5.5无法加载IBM_DB2的PDO扩展。我最初使用以下连接字符串使用PDO运行 IBM DB2 odbc驱动程序:
try {
$dbc = new PDO("ibm:DRIVER={IBM DB2 ODBC DRIVER};
DATABASE=MYDB;"."HOSTNAME=myhost;", "myuser", "mypassword");
} catch (PDOException $e) {
print "Error!: " . $e->getMessage(). "<br/>";
die();
}
...但我收到了来自主机的连接错误。也许这是iSeries的错误驱动因素?
然后我在IBM i Access for Windows的安装中找到了一个iSeries Access ODBC驱动程序,并认为这可能是需要的驱动程序。我不得不进行系统还原以使iSeries Access ODBC驱动程序正常工作,但是还原卸载了其他IBM DB2 ODBC驱动程序。现在可以正确显示iSeries Access ODBC驱动程序。
但是,现在PDO扩展无法加载。它抱怨db2cli.dll缺失。在尝试修复thsi时,它还重新安装了旧的IBM DB2 ODBC驱动程序连接。注意:我仍然收到错误消息。
1)IBM DB2 ODBC驱动程序是否适用于iSeries,我的连接字符串是否错误?
2)缺少的db2cli.dll消息是否表明PDO连接确实与IBM DB2 ODBC驱动程序绑定在一起?我想知道iAccess ODBC驱动程序是否可以/应该与PDO扩展一起使用。
感谢任何帮助。谢谢。
答案 0 :(得分:2)
两个ODBC驱动程序都是必需的,连接字符串是错误的。
1)要删除db2cli.dll消息,必须从IBM下载odbc cli驱动程序(除了iSeries ODBC驱动程序的Client Access 7.1.zip),然后必须手动更新路径指向db2cli.dll文件。
2)连接字符串如下:(包括大括号)
$dbc = new PDO("odbc:DRIVER={iSeries Access ODBC DRIVER}; ",
"SYSTEM={foobar}; ",
"DATABASE={dbname}; ",
"UID={foo}; ",
"PWD={bar}");