我正在使用PHP的OCI库与Oracle进行通信。在每个函数中都有一个try ... catch来捕获任何异常。在catch部分,我调用自己的错误处理函数。
当发生异常时,我想回滚所有打开的连接到oracle,最好是在我的错误处理函数中。这可能吗?
由于
# #有点hacky,但这就是我解决问题的方法。
在连接到Oracle的connect()函数中,我输入了以下代码:
if(!isset($GLOBALS['OPEN_CONNECTIONS'])){
$GLOBALS['OPEN_CONNECTIONS'] = array();
$GLOBALS['OPEN_CONNECTIONS'][] = $this;
}else{
$GLOBALS['OPEN_CONNECTIONS'][] = $this;
}
这将存储全局范围内所有打开的连接的列表。
在我的错误处理功能中,我这样做:
//rollback all open connections
if(isset($GLOBALS['OPEN_CONNECTIONS'])){
foreach($GLOBALS['OPEN_CONNECTIONS'] as $con){
$con->rollback();
}
}
这样,我可以回滚所有打开的连接,而不必将它们传递给我的错误处理程序。