oci_free_statement

(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)

oci_free_statement释放与语句或游标关联的所有资源

说明

oci_free_statement(resource $statement): bool

释放与 Oracle 的游标或语句关联的资源,这些资源是作为 oci_parse() 的结果接收到的,或者从 Oracle 获得的。

参数

statement

有效的 OCI 语句标识符。

返回值

成功时返回 true,失败时返回 false

添加注释

用户贡献的注释 3 个注释

Jen M.
15 年前
oci_free_statement 并不总是释放游标。我有一个查询,我在循环中执行了以下函数

OCIParse
OCIExecute
Oci_fetch_assoc
(获取一些字段值)
OciFreeStatement

我没有指定使用游标,但我遇到了“超过最大
打开的游标”错误。在我的代码中,我有一个“select * from table_with_lobs”查询。当我将查询更改为“select a, b, c, from table_with_lobs”(我指定了实际的列名,这些列不是 LOB 字段)时,错误消息消失了,我不必诉诸于在 Oracle 中提高 max_open_cursors 的值。
rada at instinctive dot it
16 年前
如果您使用游标,请确保释放语句 *和* 游标,尤其是在可能再次运行 proc/游标的情况下(例如,使用不同的参数)。

<?php

oci_execute
($stmt);
oci_execute($crsr);

// 遍历游标...

oci_free_statement($stmt);
oci_free_statement($crsr);
?>

您需要显式地执行此操作,例如关闭连接似乎不会释放游标。
passerbyxp at gmail dot com
11 年前
已释放的语句不是“empty()”,它仍然是一个资源

<?php
$con
=oci_connect(/*connect*/);
$q=oci_parse($con,"SELECT sysdate FROM dual");
var_dump($q); // resource(5) of type (oci8 statement)
var_dump(empty($q)); // bool(false)
var_dump(oci_statement_type($q)); // string(6) "SELECT"
echo "------\n";
oci_execute($q);
var_dump($q); // 与上面相同
var_dump(empty($q));
var_dump(oci_statement_type($q));
echo
"------\n";
oci_free_statement($q);
var_dump($q); // resource(5) of type (Unknown)
var_dump(empty($q)); // bool(false)
var_dump(oci_statement_type($q)); // 产生警告并返回 false
oci_close($con);
?>

到目前为止,我无法想到一种无需使用额外标志即可确定语句是否已释放的方法...
To Top