2024年PHP日本大会

运行时配置

这些函数的行为受php.ini中的设置影响。

ibm_db2 配置选项
名称 默认值 可更改 变更日志
ibm_db2.binmode "1" INI_ALL  
ibm_db2.i5_all_pconnect "0" INI_SYSTEM 自 ibm_db2 1.6.5 起可用。
ibm_db2.i5_allow_commit "0" INI_SYSTEM 自 ibm_db2 1.4.9 起可用。
ibm_db2.i5_blank_userid "0" INI_SYSTEM 自 ibm_db2 1.9.7 起可用。
ibm_db2.i5_char_trim "0" INI_SYSTEM 自 ibm_db2 2.1.0 起可用。
ibm_db2.i5_dbcs_alloc "0" INI_SYSTEM 自 ibm_db2 1.5.0 起可用。
ibm_db2.i5_guard_profile "0" INI_SYSTEM 自 ibm_db2 1.9.7 起可用。
ibm_db2.i5_ignore_userid "0" INI_SYSTEM 自 ibm_db2 1.8.0 起可用。
ibm_db2.i5_job_sort "0" INI_SYSTEM 自 ibm_db2 1.8.4 起可用。
ibm_db2.i5_log_verbose "0" INI_SYSTEM 自 ibm_db2 1.9.7 起可用。
ibm_db2.i5_max_pconnect "0" INI_SYSTEM 自 ibm_db2 1.9.7 起可用。
ibm_db2.i5_override_ccsid "0" INI_SYSTEM 自 ibm_db2 1.9.7 起可用。
ibm_db2.i5_servermode_subsystem NULL INI_SYSTEM 自 ibm_db2 1.9.7 起可用。
ibm_db2.i5_sys_naming "0" INI_SYSTEM 自 ibm_db2 1.9.7 起可用。
ibm_db2.instance_name NULL INI_SYSTEM 自 ibm_db2 1.0.2 起可用。

以下是配置指令的简短说明。

ibm_db2.binmode int

此选项控制在PHP应用程序中用于转换为和从二进制数据转换的模式。

  • 1 (DB2_BINARY)

  • 2 (DB2_CONVERT)

  • 3 (DB2_PASSTHRU)

ibm_db2.i5_all_pconnect int

此选项强制所有连接在 IBM i 上保持持久。基本上,所有db2_connect() 调用都透明地变为db2_pconnect() 调用。默认情况下,此选项为0。此选项是为了方便在持久连接速度更快的场合使用。不应在新应用程序中使用此选项。

  • 0 - 可以建立持久和非持久连接。

  • 1 - 所有连接都是持久的。

ibm_db2.i5_allow_commit int

此选项控制使用的交易隔离模式。默认情况下,此选项为0,因此不使用提交控制。如果在传递给db2_connect()db2_pconnect()的连接选项数组中设置了数组键i5_commit,则可以在连接时覆盖此选项。

  • 0 - 不使用提交控制

  • 1 - 读取未提交,可能出现脏读。

  • 2 - 读取已提交,不会出现脏读。

  • 3 - 可重复读取,不会出现脏读和不可重复读

  • 4 - 可序列化,不会出现脏读、不可重复读和幻读

ibm_db2.i5_blank_userid int

这控制是否允许在 IBM i 上使用空白用户 ID。默认情况下,此选项为0。与ibm_db2.i5_ignore_userid不同,此选项不会强制所有用户 ID 为空或更改作业行为,而只是允许传递空用户 ID,以便以当前用户身份连接到 Db2。

  • 0 - 不允许传递空白用户 ID。

  • 1 - 允许传递空白用户 ID。

ibm_db2.i5_char_trim int

此选项控制是否在 IBM i 上修剪字符串的末尾。由于许多表使用用空格填充的固定列大小,因此提供了此选项作为方便之举。默认情况下,此选项为0

  • 0 - 不修剪列。

  • 1 - 删除返回的字符列末尾的空格。

ibm_db2.i5_dbcs_alloc int

此选项会影响 IBM i 上的内部缓冲区分配策略。默认情况下,此选项为0。当设置此选项时,将分配具有更大大小的缓冲区,以防数据库在编码之间转换时低估字符串的大小。此选项使用六倍的缓冲区内存(以适应最大的 UTF-8 序列),但如果返回截断的数据,则可能需要此选项。

  • 0 - 分配最小大小的缓冲区。

  • 1 - 分配更大大小的缓冲区。

ibm_db2.i5_guard_profile int

此选项检查连接到 IBM i 上的持久数据库连接时是否切换了数据库用户概要文件,如果切换了,则断开与数据库的连接。默认情况下,此选项设置为0

  • 0 - 不检查概要文件交换。

  • 1 - 检查概要文件交换,如果交换则断开连接。

ibm_db2.i5_log_verbose int

此选项设置是否始终将 SQL 诊断消息(如警告和错误)发送到 IBM i 上的 PHP 错误日志。通常,只有在失败时才会将简短消息(例如“语句执行失败”)发送到 PHP 错误日志,因为此选项默认设置为0。请注意,您仍然可以并且应该手动调用例如db2_stmt_errormsg() 作为检查函数是否失败的一部分。

  • 0 - 只记录简短消息。

  • 1 - 除了简短消息外,还记录 SQL 诊断消息。

ibm_db2.i5_ignore_userid int

在 IBM i 上运行时,此选项会忽略连接到数据库时的用户 ID,并在 PHP 作业内部运行 SQL/CLI 功能,而不是单独的作业。默认情况下,此选项为0。启用后,它不再使用单独的数据库服务器作业,而是始终使用当前用户概要文件作为数据库,忽略传递给db2_connect()db2_pconnect() 的用户名和密码。

  • 0 - 使用指定的凭据,并使用 SQL/CLI 服务器作业。

  • 1 - 始终使用空白凭据,并在 PHP 作业中运行 SQL/CLI。

ibm_db2.i5_job_sort int

控制 IBM i 上的作业排序选项。默认情况下,此选项为0。这对应于 IBM i SQL/CLI SQL_ATTR_CONN_SORT_SEQUENCE 属性。

  • 0 - 使用*HEX排序选项,按字节排序。

  • 1 - 使用为 PHP 作业设置的作业排序序列。

  • 2 - 使用为数据库作业设置的作业排序序列。

ibm_db2.i5_max_pconnect int

这会影响在 IBM i 上运行时可以重用持久连接的次数。默认情况下,此设置为0,这意味着始终可以重用持久连接。此选项可以帮助解决长期运行的数据库作业中的问题(例如,如果过程泄漏内存),但这显然不是长期的解决方案。

ibm_db2.i5_override_ccsid int

用于从 IBM i 上的 EBCDIC 进行字符转换的 PASE CCSID。默认情况下,此值为0,它将选择默认的 PASE 作业 CCSID,该 CCSID 来自 PASE 本地设置。例如,将其设置为1208将使用 UTF-8。只有当 PASE 作业 CCSID 不是预期的 CCSID 并且无法修改区域设置时,才应修改此设置。

要了解有关 IBM i 上 CCSID 的更多信息,请参阅» IBM 文档。要了解 IBM i PASE 上的语言环境如何映射到 CCSID,请参阅» IBM 文档

ibm_db2.i5_sys_naming int

此选项控制连接到 IBM i 系统时的命名模式。默认情况下,此选项为0。命名模式会影响名称的解析方式和允许的名称语法。设置为0时,此选项使用句点限定名称,并使用默认库或用户 ID 来解析名称。设置为1时,此选项使用斜杠限定名称,并使用作业库列表来解析名称。

  • 0 - 使用 SQL 命名模式 (“SCHEMA.TABLE”)。

  • 1 - 使用系统命名模式 (“LIBRARY/FILE”)。

要了解有关 IBM i 上命名模式的更多信息,请参阅» IBM 文档

ibm_db2.i5_servermode-subsystem string

此选项更改 IBM i 上子系统数据库服务器作业运行所在的子系统。默认情况下,此选项为null,因此作业将在 QSQSRVR 作业的默认子系统下运行。

ibm_db2.instance_name string

在 Linux 和 UNIX 操作系统上,此选项定义用于编目数据库连接的实例名称。默认情况下,此选项为null。如果设置此选项,则其值将覆盖DB2INSTANCE环境变量设置。

此选项在 Windows 操作系统上被忽略。

添加注释

用户贡献的注释 2 条注释

yoshida at zend dot co dot jp
13 年前
我觉得 ibm_db2.i5_dbcs_alloc 的解释很难理解。

在 ibm_db2 扩展内部,如果 i5_dbcs_alloc 值为 1,则会分配字符串列长度的 6 倍。
分配的区域用于在 UTF-8 和 EBCDIC 字符编码之间进行转换。

根据 UTF-8 的定义,字母长度最多需要 6 个字节。

注意
对于长列,分配的大小可能会超过 DB2 中定义的上限,因为原始列的大小乘以了 6 倍。这可能会导致结果数据变为 null。
吉田 悟
11 年前
我觉得 ibm_db2.i5_allow_commit 的解释有点难理解。

我认为最好将“no commit”替换为“无法使用提交控制”或“不允许事务”,并将“allow commit”更改为
“可以使用提交控制”或“允许事务”,谢谢。
To Top