如何连接 AS400 与 Laravel
How to connect AS400 with Laravel
一段时间以来,我一直在寻找如何尝试使用 Laravel 7 连接到 AS400。
我使用这个包:https://github.com/cooperl22/laravel-ibmi
我将 laravel-ibmi 添加到您的 composer.json 文件中:
"require": {
"cooperl/laravel-ibmi": "^7.0"
}
使用 composer 安装这个包。
$ composer update
运行 在我项目根目录的命令行上:
$ php artisan vendor:publish
并在 .env 中设置凭据
DB_CONNECTION=ibmi
DB_HOST=********
DB_PORT=********
DB_DATABASE=********
DB_USERNAME=********
DB_PASSWORD=********
我尝试与 tinket 建立连接,但我收到这条消息:
Psy Shell v0.10.4 (PHP 7.2.24-0ubuntu0.18.04.4 — cli) by Justin Hileman
>>> DB::connection();
PDOException with message 'could not find driver
我应该在 app/config/db2.php 中设置我的凭据,而不是在 .env 中?
更新
我安装了unixODBC
odbcinst -j
unixODBC 2.3.4
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/za/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
下载ibm_data_server_driver_for_odbc_cli_linux390x64_v11.5.tar.gz
tar -xavf ibm_data_server_driver_for_odbc_cli_linux390x64_v11.5.tar.gz
cd odbc_cli
sudo mkdir -p /opt/ibm/clidriver
sudo cp -r clidriver/* /opt/ibm/clidriver
编辑 odbcinst.ini
[Db2]
Description=Db2 Driver
Driver=/opt/ibm/clidriver/lib/libdb2o.so
fileusage=1
dontdlclose=1
为测试编辑odbc.ini
[sample]
Description = Test to DB2
Driver = Db2
但是当我尝试时,我收到了这条消息
export DB2INSTANCE=db2inst1
isql -v sample db2inst1 ibmdb2
[01000][unixODBC][Driver Manager]Can't open lib '/opt/ibm/clidriver/lib/libdb2o.so' : file not found
[ISQL]ERROR: Could not SQLConnect
更新 2
我去https://www.ibm.com/support/pages/node/633843
单击“下载 IBM i Access 客户端解决方案”
出现提示时,使用我的 IBMid 登录
向下滚动,在 ACS Linux App Pkg 旁边,select 立即下载
在我安装 ibm-iaccess-1.1.0.13-1.0.x86_64.rpm 之后,我看到它自动将 IBM i Access ODBC 驱动程序添加到 odbcinst.ini。
为测试编辑odbc.ini
[sample]
Description = Test to DB2
Driver = IBM i Access ODBC Driver
但它是重复的错误(而 /opt/ibm/iaccess/lib64/libcwbodbc.so 存在)。
isql -v sample
[01000][unixODBC][Driver Manager]Can't open lib '/opt/ibm/iaccess/lib64/libcwbodbc.so' : file not found
[ISQL]ERROR: Could not SQLConnect
更新 3
我输入这个命令
ldd /opt/ibm/iaccess/lib64/libcwbodbc.so
linux-vdso.so.1 (0x00007ffe4830e000)
libodbcinst.so.2 => /usr/lib/x86_64-linux-gnu/libodbcinst.so.2 (0x00007f1fdc97e000)
libcwbcore.so => not found
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f1fdc5f5000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1fdc257000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f1fdc03f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1fdbc4e000)
libltdl.so.7 => /usr/lib/x86_64-linux-gnu/libltdl.so.7 (0x00007f1fdba44000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1fdb825000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1fdce6c000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1fdb621000)
我后来也这么做了。
cp /opt/ibm/iaccess/lib64/libcwbcore.so /usr/lib/x86_64-linux-gnu/
isql -v sample
[S1000][unixODBC][IBM][Pilote ODBC System i Access]Le nom de syst�me requis pour la connexion est manquant.
[ISQL]ERROR: Could not SQLConnect
对于 PHP 和 Laravel,明智的做法是先让 unixODBC 在命令行下工作,然后再尝试使其与 PHP 一起工作。原因是当您要测试的组件较少时,故障排除会更容易。它还有助于职责分离。
解决办法是下载安装
Linux 上 ODBC/CLI 的合适 Db2 驱动程序,专门用于 IBM 网站上的 i 系列 (AS/400) link.
另一个小型 clidriver(由 IBM 提供)无法与 i 系列通信,除非您通过 Db2-connect 网关或拥有 Db2-connect 许可证(单独购买)。所以通常改用 IBM i 访问产品会更有效。 clidriver 无需许可证或 Db2-connect 即可正常工作,仅当目标 Db2-server 在 Linux 或 Unix 变体或 Microsoft Windows.
上运行时
此 IBM i access client
产品包含一个 PDF 文档 "Installation and Usage Guide",其中包含有用的信息和多个有用资源的链接。
安装后,需要正确配置 odbcjinst.ini
(详细说明驱动程序)和 odbc.ini
(详细说明数据源)(或 .odbc.ini
给用户DSNs)与 IBM i 访问客户端产品提供的驱动程序一起使用。
完成 odbcinst.ini
和 odbc.ini
的说明可在 unixODBC 网站上找到。
使用 isql
工具测试与 i 系列的连接,以验证 unixODBC 能够连接并使用 SQL 查询。
IBM i access 产品还具有故障排除工具,其中包括 cwbping
和 cwbtrc
命令,这些命令独立于 unixODBC 运行 Db2 驱动程序。
一旦 isql
成功连接到 i 系列数据库,您现在就可以配置 PHP 以正常方式使用驱动程序。然后您可以使用 Laravel.
进行测试
请记住确保您的 linux shell 设置正确的 LANG
环境变量以匹配您的国家和字符编码,然后再访问数据库(这需要相关的 locale
必须安装),否则代码页转换可能会产生意想不到的结果。
一段时间以来,我一直在寻找如何尝试使用 Laravel 7 连接到 AS400。
我使用这个包:https://github.com/cooperl22/laravel-ibmi
我将 laravel-ibmi 添加到您的 composer.json 文件中:
"require": {
"cooperl/laravel-ibmi": "^7.0"
}
使用 composer 安装这个包。
$ composer update
运行 在我项目根目录的命令行上:
$ php artisan vendor:publish
并在 .env 中设置凭据
DB_CONNECTION=ibmi
DB_HOST=********
DB_PORT=********
DB_DATABASE=********
DB_USERNAME=********
DB_PASSWORD=********
我尝试与 tinket 建立连接,但我收到这条消息:
Psy Shell v0.10.4 (PHP 7.2.24-0ubuntu0.18.04.4 — cli) by Justin Hileman
>>> DB::connection();
PDOException with message 'could not find driver
我应该在 app/config/db2.php 中设置我的凭据,而不是在 .env 中?
更新
我安装了unixODBC
odbcinst -j
unixODBC 2.3.4
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/za/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
下载ibm_data_server_driver_for_odbc_cli_linux390x64_v11.5.tar.gz
tar -xavf ibm_data_server_driver_for_odbc_cli_linux390x64_v11.5.tar.gz
cd odbc_cli
sudo mkdir -p /opt/ibm/clidriver
sudo cp -r clidriver/* /opt/ibm/clidriver
编辑 odbcinst.ini
[Db2]
Description=Db2 Driver
Driver=/opt/ibm/clidriver/lib/libdb2o.so
fileusage=1
dontdlclose=1
为测试编辑odbc.ini
[sample]
Description = Test to DB2
Driver = Db2
但是当我尝试时,我收到了这条消息
export DB2INSTANCE=db2inst1
isql -v sample db2inst1 ibmdb2
[01000][unixODBC][Driver Manager]Can't open lib '/opt/ibm/clidriver/lib/libdb2o.so' : file not found
[ISQL]ERROR: Could not SQLConnect
更新 2
我去https://www.ibm.com/support/pages/node/633843
单击“下载 IBM i Access 客户端解决方案”
出现提示时,使用我的 IBMid 登录
向下滚动,在 ACS Linux App Pkg 旁边,select 立即下载
在我安装 ibm-iaccess-1.1.0.13-1.0.x86_64.rpm 之后,我看到它自动将 IBM i Access ODBC 驱动程序添加到 odbcinst.ini。
为测试编辑odbc.ini
[sample]
Description = Test to DB2
Driver = IBM i Access ODBC Driver
但它是重复的错误(而 /opt/ibm/iaccess/lib64/libcwbodbc.so 存在)。
isql -v sample
[01000][unixODBC][Driver Manager]Can't open lib '/opt/ibm/iaccess/lib64/libcwbodbc.so' : file not found
[ISQL]ERROR: Could not SQLConnect
更新 3
我输入这个命令
ldd /opt/ibm/iaccess/lib64/libcwbodbc.so
linux-vdso.so.1 (0x00007ffe4830e000)
libodbcinst.so.2 => /usr/lib/x86_64-linux-gnu/libodbcinst.so.2 (0x00007f1fdc97e000)
libcwbcore.so => not found
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f1fdc5f5000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1fdc257000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f1fdc03f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1fdbc4e000)
libltdl.so.7 => /usr/lib/x86_64-linux-gnu/libltdl.so.7 (0x00007f1fdba44000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1fdb825000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1fdce6c000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1fdb621000)
我后来也这么做了。
cp /opt/ibm/iaccess/lib64/libcwbcore.so /usr/lib/x86_64-linux-gnu/
isql -v sample
[S1000][unixODBC][IBM][Pilote ODBC System i Access]Le nom de syst�me requis pour la connexion est manquant.
[ISQL]ERROR: Could not SQLConnect
对于 PHP 和 Laravel,明智的做法是先让 unixODBC 在命令行下工作,然后再尝试使其与 PHP 一起工作。原因是当您要测试的组件较少时,故障排除会更容易。它还有助于职责分离。
解决办法是下载安装 Linux 上 ODBC/CLI 的合适 Db2 驱动程序,专门用于 IBM 网站上的 i 系列 (AS/400) link.
另一个小型 clidriver(由 IBM 提供)无法与 i 系列通信,除非您通过 Db2-connect 网关或拥有 Db2-connect 许可证(单独购买)。所以通常改用 IBM i 访问产品会更有效。 clidriver 无需许可证或 Db2-connect 即可正常工作,仅当目标 Db2-server 在 Linux 或 Unix 变体或 Microsoft Windows.
上运行时此 IBM i access client
产品包含一个 PDF 文档 "Installation and Usage Guide",其中包含有用的信息和多个有用资源的链接。
安装后,需要正确配置 odbcjinst.ini
(详细说明驱动程序)和 odbc.ini
(详细说明数据源)(或 .odbc.ini
给用户DSNs)与 IBM i 访问客户端产品提供的驱动程序一起使用。
完成 odbcinst.ini
和 odbc.ini
的说明可在 unixODBC 网站上找到。
使用 isql
工具测试与 i 系列的连接,以验证 unixODBC 能够连接并使用 SQL 查询。
IBM i access 产品还具有故障排除工具,其中包括 cwbping
和 cwbtrc
命令,这些命令独立于 unixODBC 运行 Db2 驱动程序。
一旦 isql
成功连接到 i 系列数据库,您现在就可以配置 PHP 以正常方式使用驱动程序。然后您可以使用 Laravel.
请记住确保您的 linux shell 设置正确的 LANG
环境变量以匹配您的国家和字符编码,然后再访问数据库(这需要相关的 locale
必须安装),否则代码页转换可能会产生意想不到的结果。