PHP8 db2_pconnect

2024-04-07 10:24 更新

(PECL ibm_db2 >= 1.0.0)

db2_pconnect — 返回與數(shù)據(jù)庫的持久連接

說明

db2_pconnect(
    string $database,
    ?string $username,
    ?string $password,
    array $options = []
): resource|false

返回與 IBM DB2 通用數(shù)據(jù)庫 IBM 的持久連接 Cloudscape 或 Apache Derby 數(shù)據(jù)庫。

有關(guān)持久性的詳細信息 connections,請參閱持久數(shù)據(jù)庫連接。

始終在持久連接上調(diào)用 db2_close() 返回 true,但基礎(chǔ) DB2 客戶機連接保持打開狀態(tài),并且 等待為下一個匹配的 db2_pconnect() 請求提供服務(wù)。

運行 ibm_db2 版本 1.9.0 或更高版本的用戶應(yīng)注意 擴展將在 請求的結(jié)束,從而結(jié)束事務(wù)。這樣可以防止 事務(wù)塊從結(jié)轉(zhuǎn)到下一個使用該請求的請求 如果腳本執(zhí)行在事務(wù)塊之前結(jié)束,則連接。

參數(shù) 

database

DB2 客戶機目錄中的數(shù)據(jù)庫別名。

username

用于連接到數(shù)據(jù)庫的用戶名。

password

用于連接到數(shù)據(jù)庫的密碼。

options

影響行為的關(guān)聯(lián)連接選項數(shù)組 ,其中有效的數(shù)組鍵包括:

autocommit

傳遞值轉(zhuǎn)彎 為此連接句柄打開自動提交。DB2_AUTOCOMMIT_ON

傳遞值轉(zhuǎn)彎 此連接句柄的自動提交關(guān)閉。DB2_AUTOCOMMIT_OFF

DB2_ATTR_CASE

傳遞該值指定 該列名以自然大小寫返回。DB2_CASE_NATURAL

傳遞該值指定 該列名以小寫形式返回。DB2_CASE_LOWER

傳遞該值指定 該列名稱以大寫形式返回。DB2_CASE_UPPER

CURSOR

傳遞該值指定 語句資源的只進游標。這是默認設(shè)置 游標類型,并且在所有數(shù)據(jù)庫服務(wù)器上都受支持。DB2_FORWARD_ONLY

傳遞該值指定 語句資源的可滾動游標。此模式啟用 隨機訪問結(jié)果集中的行,但目前支持 僅由 IBM DB2 通用數(shù)據(jù)庫提供。DB2_SCROLLABLE

ibm_db2版本 1.7.0 中提供了以下新選項 和以后。

trustedcontext

傳遞DB2_TRUSTED_CONTEXT_ENABLE值可轉(zhuǎn)換為受信任的上下文 對于此連接句柄,請打開。不能使用 db2_set_option() 設(shè)置此參數(shù)。

僅當數(shù)據(jù)庫已編目時,此鍵才有效(即使 database is local),或者在創(chuàng)建時指定完整的 DSN 連接。

若要對數(shù)據(jù)庫進行編目,請使用以下命令:

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 選項 和以后。

小技巧

與持久性結(jié)合使用的沖突連接屬性 連接可能會在 i5/OS 上產(chǎn)生不確定的結(jié)果。站點策略應(yīng) 使用每個持久連接用戶為所有應(yīng)用程序建立 輪廓。使用持久連接時,建議使用默認DB2_AUTOCOMMIT_ON。

i5_lib

一個字符值,該值指示將 用于解析不合格的文件引用。這是無效的 如果連接使用系統(tǒng)命名模式。

i5_naming

DB2_I5_NAMING_ONvalue 打開 DB2 UDB CLI iSeries 系統(tǒng)命名模式。使用斜杠 (/) 分隔符限定文件。 使用作業(yè)的庫列表解析不合格的文件。

DB2_I5_NAMING_OFFvalue 關(guān)閉 DB2 UDB CLI 缺省值 命名模式,即 SQL 命名。使用句點 (.) 限定文件 定界符。使用默認庫解析不合格的文件 或當前用戶 ID。

i5_commit

該屬性應(yīng)設(shè)置在 db2_pconnect() 之前。如果在 連接已建立,并且連接是遠程數(shù)據(jù) source,則更改在連接句柄的下一個成功 db2_pconnect() 之前不會生效。i5_commit

注意

php.ini設(shè)置 ==0 或者是默認值,但可能是 被選項覆蓋。ibm_db2.i5_allow_commitDB2_I5_TXN_NO_COMMITi5_commit

DB2_I5_TXN_NO_COMMIT- 不使用承諾控制。

DB2_I5_TXN_READ_UNCOMMITTED- 臟讀,不可重復(fù) 讀取,幻影是可能的。

DB2_I5_TXN_READ_COMMITTED- 無法進行臟讀。 不可重復(fù)的讀取和幻像是可能的。

DB2_I5_TXN_REPEATABLE_READ- 臟讀和不可重復(fù) 無法讀取。幻影是可能的。

DB2_I5_TXN_SERIALIZABLE- 事務(wù)是可序列化的。 無法進行臟讀取、不可重復(fù)讀取和幻像

i5_query_optimize

DB2_FIRST_IO所有查詢都經(jīng)過優(yōu)化,目標是 盡快返回輸出的第一頁。這個目標效果很好 當輸出由最有可能取消查詢的用戶控制時 查看輸出數(shù)據(jù)的第一頁后。使用 OPTIMIZE FOR nnn ROWS 子句遵循子句指定的目標。

DB2_ALL_IO所有查詢都經(jīng)過優(yōu)化,目標是運行 在最短的時間內(nèi)完成整個查詢。這是一個 當查詢的輸出被寫入文件或報表時,這是一個很好的選項,或者 接口正在對輸出數(shù)據(jù)進行排隊。使用 OPTIMIZE FOR nnn 編碼的查詢 ROWS 子句遵循子句指定的目標。這是默認設(shè)置。

i5_dbcs_alloc

DB2_I5_DBCS_ALLOC_ONvalue 打開 DB2 6X 分配方案 用于 DBCS 轉(zhuǎn)換列大小的增長。

DB2_I5_DBCS_ALLOC_OFFvalue 關(guān)閉 DB2 6X 分配方案 用于 DBCS 轉(zhuǎn)換列大小的增長。

注意

php.ini設(shè)置 ==0 或為默認值,但可能會被覆蓋 替換為選項。ibm_db2.i5_dbcs_allocDB2_I5_DBCS_ALLOC_OFFi5_dbcs_alloc

i5_date_fmt

DB2_I5_FMT_ISO- 國際標準化組織 使用 (ISO) 日期格式 yyyy-mm-dd。這是默認設(shè)置。

DB2_I5_FMT_USA- 使用美國日期格式 mm/dd/yyyy。

DB2_I5_FMT_EUR- 使用歐洲日期格式 dd.mm.yyyy。

DB2_I5_FMT_JIS- 日本工業(yè)標準日期格式 使用 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- 使用作業(yè)默認值。

i5_date_sep

DB2_I5_SEP_SLASH- 斜杠 ( / ) 用作日期分隔符。 這是默認設(shè)置。

DB2_I5_SEP_DASH- 短劃線 ( - ) 用作日期分隔符。

DB2_I5_SEP_PERIOD- 句點 ( . ) 用作日期 分隔符。

DB2_I5_SEP_COMMA- 逗號 ( , ) 用作日期分隔符。

DB2_I5_SEP_BLANK- 空白用作日期分隔符。

DB2_I5_SEP_JOB- 使用作業(yè)默認值

i5_time_fmt

DB2_I5_FMT_ISO- 國際組織 使用標準化 (ISO) 時間格式 hh.mm.ss。這是默認設(shè)置。

DB2_I5_FMT_USA- 美國時間格式 使用 hh:mmxx,其中 xx 是 AM 或 PM。

DB2_I5_FMT_EUR- 歐洲時間格式 hh.mm.ss 被使用。

DB2_I5_FMT_JIS- 日本工業(yè)標準 使用時間格式 HH:MM:SS。

DB2_I5_FMT_HMS- 使用 hh:mm:ss 格式。

i5_time_sep

DB2_I5_SEP_COLON- 冒號 ( : ) 用作時間 分隔符。這是默認設(shè)置。

DB2_I5_SEP_PERIOD- 句點 ( . ) 用作時間 分隔符。

DB2_I5_SEP_COMMA- 使用逗號 ( , ) 作為時間 分隔符。

DB2_I5_SEP_BLANK- 空白用作時間分隔符。

DB2_I5_SEP_JOB- 使用作業(yè)默認值。

i5_decimal_sep

DB2_I5_SEP_PERIOD- 句點 ( . ) 用作 小數(shù)點分隔符。這是默認設(shè)置。

DB2_I5_SEP_COMMA- 逗號 ( , ) 用作 小數(shù)分隔符。

DB2_I5_SEP_JOB- 使用作業(yè)默認值。

以下新的 i5/OS 選項在 ibm_db2 版本 1.8.0 中可用 和以后。

i5_libl

一個字符值,該值指示將用于 解析不合格的文件引用。指定庫列表 用空格分隔的元素 'i5_libl'=>“MYLIB YOURLIB ANYLIB”。

注意

i5_libl調(diào)用 qsys2/qcmdexc('cmd',cmdlen),它僅可用 在 i5/OS V5R4 及更高版本中。

返回值 

如果連接嘗試為 成功的。db2_pconnect() 嘗試重用現(xiàn)有的 與 、 和 參數(shù)完全匹配的連接資源。如果連接嘗試失敗,db2_pconnect() 將返回 false。databaseusernamepassword

更新日志 

版本說明
ibm_db2 1.9.0持久連接中的活動事務(wù)將被回滾 在每個請求的末尾。
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() 的第一次調(diào)用將返回一個新的持久連接 資源。對 db2_pconnect() 的第二次調(diào)用返回 一個持久性連接資源,它只是重用第一個持久性連接資源 連接資源。

<?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 使用可信上下文

以下示例演示如何啟用受信任的上下文、開關(guān) 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() - 返回與數(shù)據(jù)庫的連接


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號