2011-08-17 43 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部分使用以獲取有關適配器配置的詳細信息:

} 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 
}