PHP8 db2_pconnect
(PECL ibm_db2 >= 1.0.0)
db2_pconnect — 返回与数据库的持久连接
说明
db2_pconnect(
string $database,
?string $username,
?string $password,
array $options = []
): resource|false
返回与 IBM DB2 通用数据库 IBM 的持久连接 Cloudscape 或 Apache Derby 数据库。
有关持久性的详细信息 connections,请参阅持久数据库连接。
始终在持久连接上调用 db2_close() 返回 true,但基础 DB2 客户机连接保持打开状态,并且 等待为下一个匹配的 db2_pconnect() 请求提供服务。
运行 ibm_db2 版本 1.9.0 或更高版本的用户应注意 扩展将在 请求的结束,从而结束事务。这样可以防止 事务块从结转到下一个使用该请求的请求 如果脚本执行在事务块之前结束,则连接。
参数
database
DB2 客户机目录中的数据库别名。
username
用于连接到数据库的用户名。
password
用于连接到数据库的密码。
options
影响行为的关联连接选项数组 ,其中有效的数组键包括:
autocommit
传递值转弯 为此连接句柄打开自动提交。
DB2_AUTOCOMMIT_ON
传递值转弯 此连接句柄的自动提交关闭。
DB2_AUTOCOMMIT_OFF
DB2_ATTR_CASE
传递该值指定 该列名以自然大小写返回。
DB2_CASE_NATURAL
传递该值指定 该列名以小写形式返回。
DB2_CASE_LOWER
传递该值指定 该列名称以大写形式返回。
DB2_CASE_UPPER
CURSOR
传递该值指定 语句资源的只进游标。这是默认设置 游标类型,并且在所有数据库服务器上都受支持。
DB2_FORWARD_ONLY
传递该值指定 语句资源的可滚动游标。此模式启用 随机访问结果集中的行,但目前支持 仅由 IBM DB2 通用数据库提供。
DB2_SCROLLABLE
ibm_db2版本 1.7.0 中提供了以下新选项 和以后。
trustedcontext
传递DB2_TRUSTED_CONTEXT_ENABLE值可转换为受信任的上下文 对于此连接句柄,请打开。不能使用 db2_set_option() 设置此参数。
仅当数据库已编目时,此键才有效(即使 database is local),或者在创建时指定完整的 DSN 连接。
若要对数据库进行编目,请使用以下命令:
db2 catalog tcpip node loopback remote <SERVERNAME> server <SERVICENAME> db2 catalog database <LOCALDBNAME> as <REMOTEDBNAME> at node loopback db2 "update dbm cfg using svcename <SERVICENAME>" db2set DB2COMM=TCPIP
ibm_db2版本 1.5.1 中提供了以下新的 i5/OS 选项 和以后。
小技巧与持久性结合使用的冲突连接属性 连接可能会在 i5/OS 上产生不确定的结果。站点策略应 使用每个持久连接用户为所有应用程序建立 轮廓。使用持久连接时,建议使用默认DB2_AUTOCOMMIT_ON。
i5_lib
一个字符值,该值指示将 用于解析不合格的文件引用。这是无效的 如果连接使用系统命名模式。
i5_naming
DB2_I5_NAMING_ON
value 打开 DB2 UDB CLI iSeries 系统命名模式。使用斜杠 (/) 分隔符限定文件。 使用作业的库列表解析不合格的文件。DB2_I5_NAMING_OFF
value 关闭 DB2 UDB CLI 缺省值 命名模式,即 SQL 命名。使用句点 (.) 限定文件 定界符。使用默认库解析不合格的文件 或当前用户 ID。i5_commit
该属性应设置在 db2_pconnect() 之前。如果在 连接已建立,并且连接是远程数据 source,则更改在连接句柄的下一个成功 db2_pconnect() 之前不会生效。
i5_commit
注意:
php.ini设置 ==0 或者是默认值,但可能是 被选项覆盖。
ibm_db2.i5_allow_commit
DB2_I5_TXN_NO_COMMIT
i5_commit
DB2_I5_TXN_NO_COMMIT
- 不使用承诺控制。DB2_I5_TXN_READ_UNCOMMITTED
- 脏读,不可重复 读取,幻影是可能的。DB2_I5_TXN_READ_COMMITTED
- 无法进行脏读。 不可重复的读取和幻像是可能的。DB2_I5_TXN_REPEATABLE_READ
- 脏读和不可重复 无法读取。幻影是可能的。DB2_I5_TXN_SERIALIZABLE
- 事务是可序列化的。 无法进行脏读取、不可重复读取和幻像i5_query_optimize
DB2_FIRST_IO
所有查询都经过优化,目标是 尽快返回输出的第一页。这个目标效果很好 当输出由最有可能取消查询的用户控制时 查看输出数据的第一页后。使用 OPTIMIZE FOR nnn ROWS 子句遵循子句指定的目标。DB2_ALL_IO
所有查询都经过优化,目标是运行 在最短的时间内完成整个查询。这是一个 当查询的输出被写入文件或报表时,这是一个很好的选项,或者 接口正在对输出数据进行排队。使用 OPTIMIZE FOR nnn 编码的查询 ROWS 子句遵循子句指定的目标。这是默认设置。i5_dbcs_alloc
DB2_I5_DBCS_ALLOC_ON
value 打开 DB2 6X 分配方案 用于 DBCS 转换列大小的增长。DB2_I5_DBCS_ALLOC_OFF
value 关闭 DB2 6X 分配方案 用于 DBCS 转换列大小的增长。注意:
php.ini设置 ==0 或为默认值,但可能会被覆盖 替换为选项。
ibm_db2.i5_dbcs_alloc
DB2_I5_DBCS_ALLOC_OFF
i5_dbcs_alloc
i5_date_fmt
DB2_I5_FMT_ISO
- 国际标准化组织 使用 (ISO) 日期格式 yyyy-mm-dd。这是默认设置。DB2_I5_FMT_USA
- 使用美国日期格式 mm/dd/yyyy。DB2_I5_FMT_EUR
- 使用欧洲日期格式 dd.mm.yyyy。DB2_I5_FMT_JIS
- 日本工业标准日期格式 使用 YYYY-MM-DD。DB2_I5_FMT_MDY
- 使用日期格式 mm/dd/yyyy。DB2_I5_FMT_DMY
- 使用日期格式 dd/mm/yyyy。DB2_I5_FMT_YMD
- 使用日期格式 yy/mm/dd。DB2_I5_FMT_JUL
- 使用儒略日期格式 yy/ddd。DB2_I5_FMT_JOB
- 使用作业默认值。i5_date_sep
DB2_I5_SEP_SLASH
- 斜杠 ( / ) 用作日期分隔符。 这是默认设置。DB2_I5_SEP_DASH
- 短划线 ( - ) 用作日期分隔符。DB2_I5_SEP_PERIOD
- 句点 ( . ) 用作日期 分隔符。DB2_I5_SEP_COMMA
- 逗号 ( , ) 用作日期分隔符。DB2_I5_SEP_BLANK
- 空白用作日期分隔符。DB2_I5_SEP_JOB
- 使用作业默认值i5_time_fmt
DB2_I5_FMT_ISO
- 国际组织 使用标准化 (ISO) 时间格式 hh.mm.ss。这是默认设置。DB2_I5_FMT_USA
- 美国时间格式 使用 hh:mmxx,其中 xx 是 AM 或 PM。DB2_I5_FMT_EUR
- 欧洲时间格式 hh.mm.ss 被使用。DB2_I5_FMT_JIS
- 日本工业标准 使用时间格式 HH:MM:SS。DB2_I5_FMT_HMS
- 使用 hh:mm:ss 格式。i5_time_sep
DB2_I5_SEP_COLON
- 冒号 ( : ) 用作时间 分隔符。这是默认设置。DB2_I5_SEP_PERIOD
- 句点 ( . ) 用作时间 分隔符。DB2_I5_SEP_COMMA
- 使用逗号 ( , ) 作为时间 分隔符。DB2_I5_SEP_BLANK
- 空白用作时间分隔符。DB2_I5_SEP_JOB
- 使用作业默认值。i5_decimal_sep
DB2_I5_SEP_PERIOD
- 句点 ( . ) 用作 小数点分隔符。这是默认设置。DB2_I5_SEP_COMMA
- 逗号 ( , ) 用作 小数分隔符。DB2_I5_SEP_JOB
- 使用作业默认值。
以下新的 i5/OS 选项在 ibm_db2 版本 1.8.0 中可用 和以后。
i5_libl
一个字符值,该值指示将用于 解析不合格的文件引用。指定库列表 用空格分隔的元素 'i5_libl'=>“MYLIB YOURLIB ANYLIB”。
注意:
i5_libl调用 qsys2/qcmdexc('cmd',cmdlen),它仅可用 在 i5/OS V5R4 及更高版本中。
返回值
如果连接尝试为 成功的。db2_pconnect() 尝试重用现有的 与 、 和 参数完全匹配的连接资源。如果连接尝试失败,db2_pconnect() 将返回 false。databaseusernamepassword
更新日志
版本 | 说明 |
---|---|
ibm_db2 1.9.0 | 持久连接中的活动事务将被回滚 在每个请求的末尾。 |
ibm_db2 1.8.0 | 该选项可用于 i5/OS 用户。i5_libl |
ibm_db2 1.7.0 | 该选项可用。trustedcontext |
ibm_db2 1.5.1 | 、 和 选项可用于 i5/OS 用户。i5_lib i5_naming i5_commit i5_query_optimize i5_dbcs_alloc i5_date_fmt i5_date_sep i5_time_fmt i5_time_sep i5_decimal_sep |
示例
示例 #1 A db2_pconnect() example
在以下示例中,对 db2_pconnect() 的第一次调用将返回一个新的持久连接 资源。对 db2_pconnect() 的第二次调用返回 一个持久性连接资源,它只是重用第一个持久性连接资源 连接资源。
<?php
$database = 'SAMPLE';
$user = 'db2inst1';
$password = 'ibmdb2';
$pconn = db2_pconnect($database, $user, $password);
if ($pconn) {
echo "Persistent connection succeeded.";
}
else {
echo "Persistent connection failed.";
}
$pconn2 = db2_pconnect($database, $user, $password);
if ($pconn) {
echo "Second persistent connection succeeded.";
}
else {
echo "Second persistent connection failed.";
}
?>
以上示例会输出:
Persistent connection succeeded. Second persistent connection succeeded.
示例 #2 使用可信上下文
以下示例演示如何启用受信任的上下文、开关 users,并获取当前用户 ID。
<?php
$database = "SAMPLE";
$hostname = "localhost";
$port = 50000;
$authID = "db2inst1";
$auth_pass = "ibmdb2";
$tc_user = "tcuser";
$tc_pass = "tcpassword";
$dsn = "DATABASE=$database;HOSTNAME=$hostname;PORT=$port;
PROTOCOL=TCPIP;UID=$authID;PWD=$auth_pass;";
$options = array ("trustedcontext" => DB2_TRUSTED_CONTEXT_ENABLE);
$tc_conn = db2_pconnect($dsn, "", "", $options);
if($tc_conn) {
echo "Explicit trusted connection succeeded.\n";
if(db2_get_option($tc_conn, "trustedcontext")) {
$userBefore = db2_get_option($tc_conn, "trusted_user");
//Do some work as user 1.
//Switching to trusted user.
$parameters = array("trusted_user" => $tc_user,
"trusted_password" => $tcuser_pass);
$res = db2_set_option ($tc_conn, $parameters, 1);
$userAfter = db2_get_option($tc_conn, "trusted_user");
//Do more work as trusted user.
if($userBefore != $userAfter) {
echo "User has been switched." . "\n";
}
}
db2_close($tc_conn);
}
else {
echo "Explicit trusted connection failed.\n";
}
?>
以上示例会输出:
Explicit trusted connection succeeded. User has been switched.
参见
- db2_connect() - 返回与数据库的连接
更多建议: