0

PHP の OCI ライブラリを使用して Oracle と通信しています。すべての関数には、例外をキャッチするための try...catch があります。catch 部分では、独自のエラー処理関数を呼び出します。

例外が発生した場合、できればエラー処理関数で、開いているすべての接続をオラクルにロールバックしたいと考えています。これは可能ですか?

ありがとう

# #

少しハックですが、問題を解決した方法を次に示します。

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