现在,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">
";
echo "<br/><tr>
<td>名字</td><td>性别</td><td>员工编号</td><td>工资</td><td>部门</td><td>出生日期</td><td>进入公司日期</td>
</tr>
";
while ($row = oci_fetch_array($stmt, OCI_ASSOC+OCI_RETURN_NULLS)) {
echo "<tr>
";
foreach ($row as $item) {
echo "<td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . "</td>
";
}
echo "</tr>
";
}
echo "</table>
";
OCIFreeStatement($stmt);
OCILogoff($conn);
通过查阅资料,在一个英文论坛不起眼的地方发现有人说,这是PHP5的bug,
用oci_new_connect代替OCILogon函数就可以解决问题。 当时就这么解决了,也没管。 当我做完东西,apache都拆了的时候,发现有些PHP网页里,我在使用完数据库之后漏写了OCILogoff,也就是没有释放连接。我猜这就是症结所在,因为所有的这些PHP都是用同一个账户连接的,产生了冲突,而oci_new_connect新建连接显然可以避免这个问题。 所以,我想,
如果所有的网页都在使用完连接之后安全释放,应该就能够避免上面的问题。不过,也没机会进行验证了,如果有同志遇到这样的问题,不妨试一下。RHEL5.5_x86_64 上安装Oracle10g Release 2在Linux下安装DP客户端备份Oracle相关资讯 oracle
- [INS-32052] Oracle基目录和Oracle (07/22/2014 07:41:41)
- Oracle 4个大对象(lobs)数据类型 (02/03/2013 12:33:05)
- Oracle按时间段分组统计 (07/26/2012 10:36:48)
| - [Oracle] dbms_metadata.get_ddl的 (07/12/2013 07:37:30)
- Liferay Portal 配置使用Oracle和 (07/31/2012 20:07:18)
- Concurrent Request:Inactive (07/20/2012 07:44:05)
|
本文评论 查看全部评论 (0)