如何将AS400与拉拉维尔连接



一段时间以来,我一直在寻找如何尝试使用 Laravel 400 连接到 AS7。

我使用这个包:https://github.com/cooperl22/laravel-ibmi

我将 laravel-ibmi 添加到您的 composer.json 文件中:

"require": {
"cooperl/laravel-ibmi": "^7.0"
}

使用作曲家安装此软件包。

$ 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

我应该在应用程序/配置/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"旁边,选择"立即下载">

之后,我安装了 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来说,在尝试使用PHP之前,让unixODBC在命令行工作是明智的。原因是,当您要测试的组件较少时,故障排除会更容易。它还有助于职责分离。

解决方案是下载并安装 适用于 Linux 上的 ODBC/CLI 的 Db2 驱动程序,专门用于与 IBM 网站上的 i-series (AS/400( 配合使用。

另一个占用空间较小的 clidriver (由 IBM 提供(无法与 i 系列通信,除非您通过 Db2-connect 网关或具有 Db2-connect 许可证(单独购买(。因此,改用 IBM i Access 产品通常更有效。仅当目标 Db2-server 在 Linux 或 Unix 变体或 Windows Microsoft运行时,clidriver 才能正常工作,而无需许可证或 Db2-connect。

IBM i access client产品有一个包含"安装和使用指南">的 PDF 文档,其中包含有用的信息,以及指向有用资源的几个链接。

安装之后,必须正确配置odbcjinst.ini(详细说明驱动程序(和odbc.ini(详细说明数据((或用户 DSN 的.odbc.ini(,以便与 IBM i access 客户机产品提供的驱动程序一起使用。

有关完成odbcinst.iniodbc.ini的说明,请访问unixODBC网站。

使用isql工具测试与 i 系列的连接,以验证 unixODBC 是否能够连接和使用 SQL 查询。

IBM i Access 产品还具有故障诊断工具,其中包括cwbpingcwbtrc命令等,这些工具独立于 unixODBC 执行 Db2 驱动程序。

一旦isql成功连接到 i 系列数据库,您现在就可以配置 PHP 以正常方式使用该驱动程序了。然后,您可以使用 Laravel 进行测试。

请记住,在访问数据库之前,请确保您的 linux shell 设置了正确的LANG环境变量以匹配您的国家/地区和字符编码(这需要安装相关locale(,否则代码页转换可能会产生意外的结果。

最新更新