(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_new_connect — 使用唯一連線連接到 Oracle 伺服器
$username
,$password
,$connection_string
= null
,$encoding
= "",$session_mode
= OCI_DEFAULT
建立與 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_DEFAULT
、OCI_SYSOPER
和 OCI_SYSDBA
。如果指定了 OCI_SYSOPER
或 OCI_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_SYSOPER
或 OCI_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()。