2011-08-17 16 views
2

私のプロジェクトでは、Zend Frameworkを使用したPHPで、多くのmysqlサーバと多くのpdo_mysqlアダプタがあります。 私は例外(Zend_Db_Statement_Exception)をキャッチしています。 どのアダプターがこの例外をスローするかを決定する方法はありますか?Zend_Db_Exception - アダプタの入手方法

答えて

1

例外の発生元を取得するにはZend_Exceptionsクラスには何もありませんが、getTrace()メソッドです。このgetTraceを使用してZend_Db_Selectオブジェクトオブジェクトを取得することができます。また、Zend Frameworkのバージョンが古すぎない場合は、getAdapterクラスがあります(Zend_Db_SelectのgetAdapterがない場合は、 $ this - > _ adapterが存在するため)。そこで、キャッチセクションでアダプタ設定の詳細を取得するためのコードを次に示します。

} catch (Exception $e) { 
    foreach($e->getTrace() as $trace) { 
     if($trace['class']=='Zend_Db_Adapter_Abstract' || 'Zend_Db_Adapter_Pdo_Abstract'==$trace['class']) { 
      $zendDbSelect = $trace['args'][0]; 
      $zendDbAdapter = $zendDbSelect->getAdapter(); 
      $conn = $zendDbAdapter->getConfig(); 
      //output adapter configuration, more useful things could be done 
      // with that if you want 
      Zend_Debug::dump($conn); 
      // stop the loop on traces 
      break; 
     } 
    } 
    // to something else with the exception if you want 
}