连接到 IBM AS/400 DB2 数据库 [英] Connecting to an IBM AS/400 DB2 Database
问题描述
我正在尝试使用 PHP 的 ODBC 驱动程序从 Ubuntu 服务器连接到客户端的 IBM AS/400 DB2 数据库.我也安装了 unixODBC.我的 odbcinst.ini 如下所示:
I'm trying to connect to a client's IBM AS/400 DB2 Database from an Ubuntu Server using PHP's ODBC Driver. I have the unixODBC installed as well. My odbcinst.ini looks like this:
[IBM DB2 ODBC DRIVER]
Description = ODBC 5.1 Driver for Database
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so
FileUsage = 1
而我的 odbc.ini 看起来像这样:
And my odbc.ini looks like this:
[IBM DB2 ODBC DRIVER]
Driver = IBM DB2 ODBC DRIVER
Description = ODBC 5.1 Driver DSN
现在,我的连接代码是:
Now, my code to connect is:
$server = '12.345.678.90' //IP
$port = '446' //PORT
$username = 'my_username';
$password = 'my_password';
$connect = odbc_connect("DRIVER = {IBM DB2 ODBC DRIVER};System=$server:$port;Uid=$username;Pwd=$password;", $username, $password);
if(!$connect)
echo 'Cannot Connect!';
else
echo 'Connected!';
我得到的错误是这样的:
The error I get is this:
Warning: odbc_connect(): SQL Error: [unixODBC][MySQL][ODBC 5.1 Driver]Access denied for user 'my_username'@'localhost' (using password: YES), SQL state S1000 in SQLConnect
我也尝试使用 PDO ODBC 驱动程序.这是我得到的错误:
I tried using the PDO ODBC Driver also. This is the error I get:
$connect = new PDO("odbc:DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME=$server;PORT=$port;Uid=$username;Pwd=$password");
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] SQLDriverConnect: 1045 [unixODBC][MySQL][ODBC 5.1 Driver]Access denied for user 'my_username'@'localhost' (using password: YES)' in /var/www/test_file.php Stack trace: #0 /var/www/test_file.php: PDO->__construct('odbc:DRIVER={IB...') #1 {main} thrown in /var/www/test_file.php
我在这里做错了吗?我需要使用其他驱动程序吗,因为用户名和密码正确,我看到客户端使用我拥有的用户名和密码登录到数据库.我认为用户名和密码错误,因为它显示拒绝用户访问.似乎并非如此.可能还有其他问题.
Am I doing something wrong here? Do I need to use some other driver, because the username and password are correct, I saw the client log in to the database using the username and password I have. I thought the username and password were wrong because it says Access Denied for user. It doesn't seem to be the case. There might be something else that's wrong.
感谢您的帮助.我希望我把问题说得很清楚.谢谢!
Thank you for your help. I hope I made the problem very clear. Thanks!
推荐答案
您的 odbcinst.ini 文件说要使用 MySQL ODBC 驱动程序:
Your odbcinst.ini file is saying to use the MySQL ODBC driver:
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so
但您需要使用 iSeries Access ODBC 驱动程序.您收到 Access Denied for User
消息的原因是您尝试使用 IBM i 的凭据连接到 MySQL 数据库.
but you need to use the iSeries Access ODBC driver. The reason you're getting an Access Denied for User
message is because you're trying to connect to your MySQL database with credentials for the IBM i.
以下是关于如何在 Ubuntu 上连接到 DB2 for i(在 IBM i 上)的分步说明:
Here are step by step instructions for how to connect to DB2 for i (on the IBM i) on Ubuntu:
从 IBM 下载免费的 iSeriesAccess-6.1.0-1.2.i386.rpm
文件(您必须创建一个免费帐户才能获得它 - 我相信还有更多比 6.1.0-1.2 最新的版本)
Download the free iSeriesAccess-6.1.0-1.2.i386.rpm
file from IBM (you'll have to create a free account to get it - and I'm sure there is a more recent version than 6.1.0-1.2)
将 RPM 文件转换为 Ubuntu 可以理解的内容:sudo alien iSeriesAccess-6.1.0-1.2.i386.rpm
Convert the RPM file to something Ubuntu understands: sudo alien iSeriesAccess-6.1.0-1.2.i386.rpm
安装生成的 .deb:sudo dpkg -i iseriesaccess_6.1.0-2.2_i386.deb
Install the resulting .deb: sudo dpkg -i iseriesaccess_6.1.0-2.2_i386.deb
将已安装的 iSeries 库复制到 Ubuntu 期望它们的位置:sudo cp/opt/ibm/iSeriesAccess/lib/*/usr/lib
Copy the installed iSeries libraries to where Ubuntu expects them: sudo cp /opt/ibm/iSeriesAccess/lib/* /usr/lib
编辑 /etc/odbc.ini 文件以包含:
[primary]
Description = primary
Driver = iSeries Access ODBC Driver
System = IP_ADDRESS
UserID = USERNAME
Password = PASSWORD
Naming = 1
DefaultLibraries = QGPL
Database = XXXXXXXXXX
ConnectionType = 0
CommitMode = 2
ExtendedDynamic = 0
DefaultPkgLibrary = QGPL
DefaultPackage = A/DEFAULT(IBM),2,0,1,0,512
AllowDataCompression = 1
LibraryView = 0
AllowUnsupportedChar = 0
ForceTranslation = 0
Trace = 0
编辑 /etc/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
然后创建与 PDO 的连接:
And then to create the connection with PDO:
$pdo = new PDO("odbc:DRIVER={iSeries Access ODBC Driver};SYSTEM=$server;PROTOCOL=TCPIP", $username, $password);
这篇关于连接到 IBM AS/400 DB2 数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!