Catch Zend PDO Исключение - PullRequest
       6

Catch Zend PDO Исключение

0 голосов
/ 03 декабря 2010

Мне интересно, могу ли я сделать попытку поймать около $application->bootstrap()->run();
, которая поймает pdo exceptions

Это работает, но ловит все исключения, которые я не хочу.

try {
    $application->bootstrap()->run();
} catch (Exception $e) {
    print_r($e);
}

У меня был неприятный случай, когда исключение pdo генерировалось и отображался пароль из application.ini!

Стоит отметить, что я пробовал PDOException, он не перехватывается.

Моя БД настроена в ходе начальной загрузки () с помощью

    try {
        $db = $this->getPluginResource('db')->getDbAdapter();
        Zend_Registry::set('dbAdapter', $db);
    } catch (Exception $e) {
        echo 1;exit;
    }

Обратите внимание, что если я введу неверный пароль локально и запусту приложение, я не вижу 1, я вижу пустую страницу даже ссообщение об ошибке.

Ответы [ 3 ]

2 голосов
/ 03 декабря 2010

если я правильно понимаю вопрос, это означает, что вы пытаетесь поймать ваше исключение соединения с БД

, и это будет так же просто, как показано в следующих строках:

try {
    $db = Zend_Db::factory('Pdo_Mysql', $parameters);
    $db->getConnection();
} catch (Zend_Db_Adapter_Exception $e) {
    // perhaps a failed login credential, or perhaps the RDBMS is not running
} catch (Zend_Exception $e) {
    // perhaps factory() failed to load the specified Adapter class
}

в основном getConnection функция пытается подключиться к БД с параметрами, в случае неудачи она выдаст Zend_Db_Adapter_Exception, а при успешном подключении вернет PDO object

аналогично, вы можете использовать этот шаблон, чтобы поймать вас Zend_Db исключения или PDO_Exceptions в классах контроллеров или моделях, которые генерируют ошибки такого рода, но не во всем приложении

1 голос
/ 03 декабря 2010

Кажется довольно странным пытаться поймать целое приложение.Отключение отчетов об ошибках (таких как display_errors в php.ini) было бы намного лучше прекратить раскрывать любую конфиденциальную информацию из неотслеживаемых исключений.

Но чтобы ответить на ваш вопрос:

try {
    $application->bootstrap()->run();
} catch (PDOException $e) {
    print_r($e);
}

Это должно перехватывать только исключения PDO.

1 голос
/ 03 декабря 2010

Идите туда, где у вас есть код базы данных, и попробуйте попробовать его обойти.Если вы хотите только исключения Pdo, тогда ловите только исключение PdoException.Поместите что-то вроде catch (PdoExcetion_OR_What_Its_Name_Is $ e) (и отключите вывод ошибок на экран. Запишите свои ошибки в файл журнала)

...