PHP Conference Japan 2024

oci_new_connect

(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)

oci_new_connect使用唯一連線連接到 Oracle 伺服器

說明

oci_new_connect(
    字串 $username,
    字串 $password,
    ?字串 $connection_string = null,
    字串 $encoding = "",
    int $session_mode = OCI_DEFAULT
): 資源|false

建立與 Oracle 伺服器的新連線並登入。

oci_connect()oci_pconnect() 不同,oci_new_connect() 不會快取連線,而且永遠會傳回一個全新的連線控制代碼。如果您的應用程式需要在兩組查詢之間進行交易隔離,這會很有用。

參數

username

Oracle 使用者名稱。

password

username 的密碼。

connection_string

包含要連線的 Oracle 執行個體。它可以是 » 簡易連線字串tnsnames.ora 檔案中的連線名稱,或本機 Oracle 執行個體的名稱。

如果未指定或為 null,PHP 會使用環境變數,例如 TWO_TASK(在 Linux 上)或 LOCAL(在 Windows 上)和 ORACLE_SID 來決定要連線的 Oracle 執行個體

要使用簡易連線命名方法,PHP 必須連結 Oracle 10*g* 或更高版本的用戶端程式庫。Oracle 10*g* 的簡易連線字串格式為:* [//]host_name[:port][/service_name] *。從 Oracle 11*g* 開始,語法為:* [//]host_name[:port][/service_name][:server_type][/instance_name] *。Oracle 19c 引入了更多選項,包括逾時和保持連線設定。請參閱 Oracle 文件。服務名稱可以透過在資料庫伺服器機器上執行 Oracle 公用程式 lsnrctl status 來找到。

tnsnames.ora 檔案可以在 Oracle Net 搜尋路徑中,其中包含 /your/path/to/instantclient/network/admin$ORACLE_HOME/network/admin/etc。或者,設定 TNS_ADMIN 以讀取 $TNS_ADMIN/tnsnames.ora。請確保 Web 常駐程式具有檔案的讀取權限。

encoding

決定 Oracle 用戶端程式庫使用的字元集。字元集不需要與資料庫使用的字元集相符。如果不相符,Oracle 會盡力將資料轉換成資料庫字元集或從資料庫字元集轉換。根據字元集的不同,這可能無法產生可用的結果。轉換也會增加一些時間成本。

如果未指定,Oracle 用戶端程式庫會從 NLS_LANG 環境變數決定字元集。

傳遞此參數可以減少連線所需的時間。

session_mode

此參數自 PHP 5 版本(PECL OCI8 1.1)起可用,並接受下列值:OCI_DEFAULTOCI_SYSOPEROCI_SYSDBA。如果指定了 OCI_SYSOPEROCI_SYSDBA,此函式將嘗試使用外部憑證建立具備權限的連線。預設情況下,具備權限的連線是被停用的。要啟用它們,您需要將 oci8.privileged_connect 設定為 On(開啟)。

PHP 5.3(PECL OCI8 1.3.4)引入了 OCI_CRED_EXT 模式值。這會告知 Oracle 使用外部或作業系統驗證,這必須在資料庫中進行設定。OCI_CRED_EXT 旗標只能與使用者名稱「/」和空密碼一起使用。oci8.privileged_connect 可以是 On(開啟)或 Off(關閉)。

OCI_CRED_EXT 可以與 OCI_SYSOPEROCI_SYSDBA 模式組合使用。

基於安全考量,Windows 不支援 OCI_CRED_EXT

回傳值

傳回連線識別碼,或錯誤時傳回 false

更新日誌

版本 說明
8.0.0, PECL OCI8 3.0.0 connection_string 現在可以為 null。

範例

以下示範如何區分連線。

範例 #1 oci_new_connect() 範例

<?php

// 建立表格 mytab (mycol number);

function query($name, $c)
{
echo
"查詢 $name\n";
$s = oci_parse($c, "select * from mytab");
oci_execute($s, OCI_NO_AUTO_COMMIT);
$row = oci_fetch_array($s, OCI_ASSOC);
if (!
$row) {
echo
"沒有資料列\n";
} else {
do {
foreach (
$row as $item)
echo
$item . " ";
echo
"\n";
} while ((
$row = oci_fetch_array($s, OCI_ASSOC)) != false);
}
}

$c1 = oci_connect("hr", "welcome", "localhost/orcl");
$c2 = oci_new_connect("hr", "welcome", "localhost/orcl");

$s = oci_parse($c1, "insert into mytab values(1234)");
oci_execute($s, OCI_NO_AUTO_COMMIT);

query("基本連線", $c1);
query("新的連線", $c2);
oci_commit($c1);
query("送出後的新連線", $c2);

// 輸出結果:
// 查詢 基本連線
// 1234
// 查詢 新的連線
// 沒有資料列
// 查詢 送出後的新連線
// 1234

?>

更多參數用法範例請參考 oci_connect()

另請參閱

新增筆記

使用者貢獻的筆記

此頁面沒有使用者貢獻的筆記。
To Top