我使用带有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?OCI_DEFAULT
时的有效模式是什么? (即上面的代码)在尝试回答第2部分时,我希望找到OCI_DEFAULT
进行调试。但是,AFAIK这样的功能不存在。从运行脚本开始,它会在成功的PHP脚本结束时提交(即连接关闭时)。
答案 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之间没有内部性能差异。