Zend_Db_Exception - как получить адаптер - PullRequest
2 голосов
/ 17 августа 2011

В моем проекте на PHP с Zend Framework у меня есть много серверов mysql и много адаптеров pdo_mysql.В один момент я ловлю исключение (Zend_Db_Statement_Exception).Как я могу определить, какой адаптер выбрасывает это исключение?

1 Ответ

1 голос
/ 17 августа 2011

Нет ничего в классах Zend_Exceptions, чтобы получить источник исключения, кроме метода getTrace().Вы можете использовать это getTrace , чтобы получить объект объекта Zend_Db_Select, и если ваша версия Zend Framework не слишком старая, у вас есть класс getAdapter (если у вас нет getAdapter для Zend_Db_Select, это не оченьтрудно кодируемый метод, так как $ this -> _ адаптер присутствует).Итак, вот код, который можно использовать в секции 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
}
...