Zend_Db_Exception - 如何获取适配器

时间:2011-08-17 08:17:39

标签: php zend-framework zend-db

在我的Zend Framework PHP项目中,我有许多mysql服务器和许多pdo_mysql适配器。 在一瞬间,我正在捕捉异常(Zend_Db_Statement_Exception)。 我如何确定哪个适配器抛出此异常?

1 个答案:

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