在我的Zend Framework PHP项目中,我有许多mysql服务器和许多pdo_mysql适配器。 在一瞬间,我正在捕捉异常(Zend_Db_Statement_Exception)。 我如何确定哪个适配器抛出此异常?
答案 0 :(得分:1)
Zend_Exceptions类中没有任何内容可以获取Exception的来源,而是使用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
}