如何在 PHP PDO 连接中指定 CLI(驱动程序属性)?

How to specify the CLI (driver properties) in a PHP PDO connection?

这是一个艰难的过程。因此,我设法使用 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 屏幕中,这些参数也在高级设置屏幕中指定:

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

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

您可以参考 documentation,它显示了通过 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.cfg XML 文件中添加连接属性(用于 DSN 连接方法),或者您可以将这些属性放在连接 URL 以及使连接正常工作所需的任何其他属性。

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