PHP连接Oracle错误ORA-24324服务句柄未初始化的解决方法
PHP连接Oracle错误ORA-24324服务句柄未初始化的解决方法
现在,PHP与Oracle连接一般用到php_oci8.dll。但是,写完PHP代码调试的时候,我遇到了一个很古怪的问题,就是只有每一次开机第一次连能成功拿到数据,后来怎么试都不行,直接给出了错误信息Warning: ociexecute() [function.ociexecute]: OCIStmtExecute: ORA-24324: service handle not initialized。当时的PHP代码如下(这段代码从Oracle获得数据生成了一个表单):
$oraUser="VISITOR";
$oraPass="123456";
$oraDB="company";
$conn = OCILogon ($oraUser,$oraPass,$oraDB);
if (!$conn) {
exit;
}
$stmt = OCIParse($conn,"select * from visitor.employee");
if(!$stmt) {
exit;
}
OciExecute($stmt);
echo "<table width=75% border='1' cellspacing='0' cellpadding='1'>\n";
echo "<br/><tr>\n<td>名字</td><td>性别</td><td>员工编号</td><td>工资</td><td>部门</td><td>出生日期</td><td>进入公司日期</td>\n</tr>\n";
while ($row = oci_fetch_array($stmt, OCI_ASSOC+OCI_RETURN_NULLS)) {
echo "<tr>\n";
foreach ($row as $item) {
echo "<td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . "</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
OCIFreeStatement($stmt);
OCILogoff($conn);
通过查阅资料,在一个英文论坛不起眼的地方发现有人说,这是PHP5的bug,用oci_new_connect代替OCILogon函数就可以解决问题。
当时就这么解决了,也没管。
当我做完东西,apache都拆了的时候,发现有些PHP网页里,我在使用完数据库之后漏写了OCILogoff,也就是没有释放连接。我猜这就是症结所在,因为所有的这些PHP都是用同一个账户连接的,产生了冲突,而oci_new_connect新建连接显然可以避免这个问题。
所以,我想,如果所有的网页都在使用完连接之后安全释放,应该就能够避免上面的问题。不过,也没机会进行验证了,如果有同志遇到这样的问题,不妨试一下。
评论暂时关闭