从 Bitnami Wamp Stack 访问 IBM i DB2

IBM i DB2 access from Bitnami Wamp Stack

编辑: 完全可以免费执行此操作这仍然需要许可证,我不确定需要多少或确切需要哪个许可证,因为我的安装程序捆绑了我的许可证。

作为 PHP 应用程序的一部分,我正在尝试从本地 PC 连接到 IBM i DB2 服务器。我正在努力为本地发展做好准备。

我找不到下面提到的 "IBM DB2 Universal Database client" and/or "IBM DB2 Connect" 的下载。有没有人以前做过这个并且可以提供一些见解?只要 db2_* 函数可用,我愿意接受替代解决方案。我正在使用现有代码,没有 easy/quick 在开发和生产之间切换连接类型的方法。

这是一个与 here 几乎重复的问题,但也没有答案。 OP 最终放弃并使用 "IBMDA400" 连接到 "IBM Client Access OLE DB",但我也找不到它的下载。我什至不确定这种方法是否也能启用 db2_* 函数。

我看到记录的唯一 PHP 错误是在我启动服务器时(仍然成功 - 尽管没有 db2_* 函数)。

[18-Jan-2017 21:08:18 UTC] PHP Warning:  PHP Startup: Unable to load dynamic library 'C:\Bitnami\wampstack-5.6.29-1\php\ext\php_ibm_db2.dll' - The specified module could not be found.

 in Unknown on line 0

[18-Jan-2017 21:08:19 UTC] PHP Warning:  PHP Startup: Unable to load dynamic library 'C:\Bitnami\wampstack-5.6.29-1\php\ext\php_ibm_db2.dll' - The specified module could not be found.

 in Unknown on line 0

但是文件 C:\Bitnami\wampstack-5.6.29-1\php\ext\php_ibm_db2.dll 确实存在并且与目录中的所有其他 *.dll 文件具有相同的权限(自安装 Wamp 堆栈以来未被修改)。

我读到 "IBM DB2 Universal Database client" 和 "IBM DB2 Connect" 必须安装在同一台机器上 运行 PHP here 但是我找不到下载任何一个。我可以找到关于如何安装每个的说明,但没有下载 link。

我在 IBM 的站点上找到了 "IBM Data Server Client" 的下载。我想知道这是否是我需要以不同名称安装的两个程序之一。我知道名称一致性不是 IBM 的最佳属性...:D

我有一些答案。

JDBC 和 ODBC 支持是免费的,通常与其他 IBM 软件一起提供。这对 PHP 中的 db2_* 函数没有帮助。 如果您的 DB2 数据库位于 IBM i 甚至 Z/OS 上,那么唯一的方法就是使用 DB2 Connect。有几个不同的版本,但对于工作站开发,您需要 DB2 Connect Enterprise Edition。缺点是他们目前提供的最少数量的套餐是 25 个用户,价格约为 3,800 美元。这大约是 152 美元/用户,但不幸的是,对于只有 2 或 3 个开发人员的小商店来说,这实际上是不可能的。有一次他们确实提供了 5 个许可证包,但现在他们不再提供了。希望他们将来会。

如果您的 DB2 数据库在 LUW 上,那么您只需要 IBM Data Server Client,它可以从这里免费下载(虽然需要 IBM 帐户): https://www-01.ibm.com/marketing/iwm/iwm/web/reg/pick.do?source=swg-idsc97&lang=en_US

一个潜在的替代方案是从 IBM i 提供一个 API,它在 API 以外的应用程序开发期间由本地工作站使用。然而 API 本身的开发仍然只能在系统 AFAIK 上完成。您还可以设置一个本地 DB2 数据库并复制任何文件。生产和开发之间会有进一步的差异,但可以节省一些钱。

我个人认为,他们对使用 JDBC 或 ODBC 以外的方法远程连接到 IBM i 或 Z/OS 上的 DB2 数据库的功能收费,但对 LUW 不收费,这是荒谬的。再加上最小的包是供 25 个用户使用的事实,这使得小型到 mid-sized 企业(IBM i 的主要客户)更加令人沮丧。

我只使用 "IBM Data Server Client" 就可以使用它。首先,我从 Bitnami, PHP 5.6.30 32bit. Then I downloaded IBM Data Server Client from the passport advantage area. I haven't tried the version from here after getting it working though, so that one might work as well. These steps are based on the version I got from passport advantage. It has an install wizard, so you can just follow the steps, but here is an IBM article on the process. That article includes installation directions for other software in addition to IBM Data Server Client, so only pay attention to the ones which apply. After installation you have to configure the client from a Window's Command prompt. To do so I followed this 文章中安装了一个 Wamp 堆栈。总而言之,您必须对节点(服务器)进行编目,然后对数据库进行编目。然后重新启动会话并通过连接对其进行测试。语法如下:

<+NODENAME+> 是你编的。 <+REMOTE+> 是 FQDN 或 IP。 <+PORT+> 是你应该连接的 <+REMOTE+> 的端口。通常端口为 446。<+database_name+> 是数据库名称。

db2 catalog tcpip node <NODENAME> remote <REMOTE> server <PORT>

db2 catalog database <database_name> at node <NODENAME>

Db2 terminate

db2 connect to <database_name> user <user_name> (you will then be prompted for a password)

完成后,您必须从 here 获取 IBM_DB2 驱动程序的 Windows PHP ddl。我使用的是 1.9.9 版本。然后将 php_ibm_db2.dll 文件移动到 PHP 扩展目录,如 php.ini 中的 extension_dir 指令中指定的那样。然后将这一行添加到你的 php.ini extension=php_ibm_db2.dll。然后重新启动 Apache,您应该能够连接。虽然成功连接到数据库,但此时我仍然遇到不合格表的问题。尽管库列表设置正确,但它似乎使用用户名而不是提供的库列表。当我弄清楚这部分时,我会更新。

这是我必须做的事情的粗略概述,以使其在我的特定情况下工作,并不打算成为一个包罗万象的教程。如果您的环境不同,您可能需要进行调整。此外,我不确定 php_ibm_db2.dll 是否有任何其他依赖项,而这些依赖项碰巧已经满足了我的需求。希望这至少能为某人节省一些时间和金钱。

我解决了库列表问题;看到这个答案: