Oracle的oci_execute()行为使用OCI_DEFAULT for PHP> 5.3.2

时间:2013-01-11 15:32:26

标签: php oracle

我使用带有oci_execute()标志的Oracle OCI_DEFAULT来查看一些遗留代码。

oci_execute($this->result, OCI_DEFAULT);

但是,此服务器现在运行PHP> 5.3.2。根据{{​​1}}的{​​{3}}:

  

PHP 5.3.2(PECL OCI8 1.4)已废弃,但仍可用于向后兼容。在新代码中使用等效的OCI_NO_AUTO_COMMIT。

所以我的问题是两部分:

  • OCI_DEFAULT代表什么是PHP< 5.3.2?
  • 在PHP> = 5.3.2中使用OCI_DEFAULT时的有效模式是什么? (即上面的代码)

在尝试回答第2部分时,我希望找到OCI_DEFAULT进行调试。但是,AFAIK这样的功能不存在。从运行脚本开始,它会在成功的PHP脚本结束时提交(即连接关闭时)。

2 个答案:

答案 0 :(得分:4)

  

OCI_DEFAULT为PHP代表什么< 5.3.2?

文档回答了您的第一个问题。

  

PHP 5.3.2(PECL OCI8 1.4)已废弃,但仍可用于向后兼容。在新代码中使用等效的OCI_NO_AUTO_COMMIT。

然后,如果您寻找 OCI_NO_AUTO_COMMIT ......

  

不要自动提交更改。在PHP 5.3.2之前(PECL OCI8 1.4)使用OCI_DEFAULT,它是OCI_NO_AUTO_COMMIT的别名。

简短回答:“OCI_DEFAULT< PHP 5.3.2”=“与OCI_NO_AUTO_COMMIT相同> = PHP 5.3.2”=“不要自动提交正在执行的语句。”

  

在PHP> = 5.3.2中使用OCI_DEFAULT时的有效模式是什么? (即上面的代码)

它与<中的相同。 5.3.2保持向后兼容性 - 它现在已经过时/弃用了。您可以使用OCI_DEFAULT或OCI_NO_AUTO_COMMIT,但您应该使用后者,因为它可能不会永远存在。

答案 1 :(得分:0)

Web服务器应自动提交,无需手动或自动等待COMMIT命令。如果要使用一组相互依赖的SQL查询处理任何事务,我认为最好在业务层或存储过程中处理这些SQL查询,如果需要,可以应用COMMIT或ROLLBACK。

修改

OCI_DEFAULT为PHP代表什么< 5.3.2?

关闭连接时,OCI_DEFAULT会自动回滚。您需要显式调用oci_commit()来提交事务。

在PHP> = 5.3.2中使用OCI_DEFAULT时的有效模式是什么?

以前的版本只有OCI_COMMIT_ON_SUCCESS和OCI_DEFAULT。在新版本中,OCI_DEFAULT只是OCI_NO_AUTO_COMMIT的别名。以前,OCI_DEFAULT会混淆其目的。 OCI8 1.4通过重命名OCI_DEFAULT添加了新模式OCI_NO_AUTO_COMMIT。 OCI_DEFAULT和OCI_NO_AUTO_COMMIT之间没有内部性能差异。