0

我正在使用 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();
  }
}

这样,我可以回滚所有打开的连接,而无需将它们传递给我的错误处理程序。

4

0 回答 0