0

这是一个艰难的。因此,我设法使用 Windows ODBC DNS 方法并通过编目名称连接到我们的 IBM DB2 数据库。我加载了 php_pdo_ibm.dll 模块,它在连接时工作:

$connection = new PDO('ibm:SomeDB2CataloguedDBName');

编目名称(即:别名)确实指定了以下内容:

db2 update dbm cfg using SSL_CLNT_STASH "C:\somefile.kdb"

db2 update dbm cfg using SSL_CLNT_KEYDB "C:\somefile.kdb"

在 ODBC 屏幕中,这些参数也在高级设置屏幕中指定:

在此处输入图像描述

我知道即使没有设置 DB2 DB 别名,我也可以使用 ODBC 连接进行连接,因为在 db2cli.ini 文件中指定了 3 个必需的 SSL 参数。

我的问题是,如何在不引用 DB2 别名或 ODBC DNS 的情况下在 PHP 中使用新的 PDO(.....)?我希望我需要某种特殊的连接字符串?谢谢。

4

1 回答 1

1

您可以参考文档,其中显示了通过 DSN 别名或通过具有显式属性的连接字符串进行连接的示例。

假设您的环境配置正确,这两种方法都可以让您成功建立与 SSL 的连接。

要使用显式 URL 连接字符串进行连接,您需要知道正确的 Db2 驱动程序名称(可能与文档中显示的名称不同)——您的问题没有提及您使用的是哪种 Db2 驱动程序类型。

来自该文档页面的连接 URL 示例如下:

$db = new PDO( "ibm:DRIVER={IBM DB2 ODBC DRIVER};DATABASE=testdb;" . "HOSTNAME=11.22.33.444;PORT=56789;PROTOCOL=TCPIP;UID=testuser;PWD=testpass", "", "");

根据 Db2 驱动程序名称和版本,您可以在db2dsdriver.cfgXML 文件中添加连接属性(用于 DSN 连接方法),或者您可以将这些属性与任何其他必需的属性一起放在连接 URL 中以使连接正常工作。

如果您使用的是最新的 Db2 驱动程序(比 2016 年更新),那么您可以从 CLI 应用程序(如 PHP)获得 SSL 连接,而无需使用静态创建的密钥库,也无需单独部署 IBM GSK8。如果您拥有 ARM 文件格式的 Db2-instance(或服务器)证书,并且您提供了带有连接属性的完全限定名称以及 ,则这是可能的SSLServerCertificate="c:/path/to/certificate file";Security=SSL假设您的目标 Db2-server 环境已经适当配置。有关详细信息,请参阅适用于您的 Db2 服务器版本的 Db2 知识中心。

于 2020-02-13T09:55:44.377 回答