[編輯註記:OCI8 1.3 不應發生此使用者評論中描述的問題。首次使用此類連線將會返回一個 Oracle 錯誤,這將觸發 PHP 中的清理。後續的持續連線呼叫將會成功。對於高可用性,您可以考慮在您的腳本中進行連續的 oci_pconnect 呼叫。]
如果您使用 oci_pconnect 連線,而該連線已將您登出但仍然有效,似乎沒有辦法重新使用該連線。下次我嘗試 oci_pconnect 然後執行 oci_execute 操作時,我會收到「ORA-01012: not logged on」警告。即使我使用 oci_close 關閉連線,這個問題仍然存在。我最終得到了以下(相當惱人)的程式碼。
<?php
function getOracleConnection()
{
if (!function_exists('oci_pconnect'))
return false;
$toReturn = oci_pconnect('user', 'pass', 'db');
if ($testRes = @oci_parse($toReturn, 'SELECT Count(group_type_code) FROM pvo.group_type'))
if (@oci_execute($testRes))
if (@oci_fetch_array($testRes))
return $toReturn;
oci_close($toReturn);
if (!function_exists('oci_connect'))
return false;
$toReturn = oci_connect('user', 'pass', 'db');
if ($testRes = @oci_parse($toReturn, 'SELECT Count(group_type_code) FROM pvo.group_type'))
if (@oci_execute($testRes))
if (@oci_fetch_array($testRes))
return $toReturn;
oci_close($toReturn);
if (!function_exists('oci_new_connect'))
return false;
$toReturn = oci_new_connect('user', 'pass', 'db');
if ($testRes = @oci_parse($toReturn, 'SELECT Count(group_type_code) FROM pvo.group_type'))
if (@oci_execute($testRes))
if (@oci_fetch_array($testRes))
return $toReturn;
oci_close($toReturn);
return false;
}
?>