[编辑注: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;
}
?>