PHP8 db2_pconnect

2024-04-07 10:24 更新

(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_ONvalue 打开 DB2 UDB CLI iSeries 系统命名模式。使用斜杠 (/) 分隔符限定文件。 使用作业的库列表解析不合格的文件。

DB2_I5_NAMING_OFFvalue 关闭 DB2 UDB CLI 缺省值 命名模式,即 SQL 命名。使用句点 (.) 限定文件 定界符。使用默认库解析不合格的文件 或当前用户 ID。

i5_commit

该属性应设置在 db2_pconnect() 之前。如果在 连接已建立,并且连接是远程数据 source,则更改在连接句柄的下一个成功 db2_pconnect() 之前不会生效。i5_commit

注意

php.ini设置 ==0 或者是默认值,但可能是 被选项覆盖。ibm_db2.i5_allow_commitDB2_I5_TXN_NO_COMMITi5_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_ONvalue 打开 DB2 6X 分配方案 用于 DBCS 转换列大小的增长。

DB2_I5_DBCS_ALLOC_OFFvalue 关闭 DB2 6X 分配方案 用于 DBCS 转换列大小的增长。

注意

php.ini设置 ==0 或为默认值,但可能会被覆盖 替换为选项。ibm_db2.i5_dbcs_allocDB2_I5_DBCS_ALLOC_OFFi5_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_libi5_namingi5_commiti5_query_optimizei5_dbcs_alloci5_date_fmti5_date_sepi5_time_fmti5_time_sepi5_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() - 返回与数据库的连接


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号