[编辑注:OCI8 1.3 不应该遇到此用户评论中描述的问题。首次使用此类连接将返回 Oracle 错误,这将触发 PHP 中的清理。随后的持久连接调用将成功。为了实现高可用性,您可能考虑在脚本中进行连续的 oci_pconnect 调用。]
如果您使用 oci_pconnect 连接,并且连接已将您注销但仍然有效,似乎没有办法重新使用该连接。下次我尝试 oci_pconnect 并执行 oci_execute 操作时,我收到“ORA-01012:未登录”警告。即使我使用 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;
}
?>