2010-12-03 5 views
0

Я интересно, если я могу поставить попробовать поймать около $application->bootstrap()->run();
что поймает pdo exceptionsПоймайте Zend PDO Исключение

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

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

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

Достойно внимания, я пробовал PDOException, он не попадает.

My DB установлен в загрузочной перспективе() с

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

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

ответ

1

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

+1

Обновлено мое сообщение, чтобы отразить то, что Ive пытался по отношению к этому. – azz0r 2010-12-03 12:08:32

+0

Подробнее о PdoException здесь http://php.net/manual/en/class.pdoexception.php – cristian 2010-12-03 12:10:10

1

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

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

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

Это должно поймать только PDO исключений.

+0

PDOException ничего не возвращает для меня, хотя я думал, что это тоже должно быть. – azz0r 2010-12-03 12:08:52

2

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

и это было бы так же легко, как эти строчки ниже:

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 функция пытается подключитесь к db с параметрами, если он не сработал , он выкинет Zend_Db_Adapter_Exception, и если он будет успешно подключен, он вернет PDO object

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

Смежные вопросы