我想知道我是否可以试一试$application->bootstrap()->run();
这将抓住pdo exceptions
这样可行,但它捕获了我不想要的每个异常。
try {
$application->bootstrap()->run();
} catch (Exception $e) {
print_r($e);
}
我有一个令人讨厌的pdo异常事件被抛出并显示来自application.ini的密码!
值得注意的是,我尝试过PDOException,但它并没有被捕获。
我的数据库是在带有
的bootstrap run()中设置的 try {
$db = $this->getPluginResource('db')->getDbAdapter();
Zend_Registry::set('dbAdapter', $db);
} catch (Exception $e) {
echo 1;exit;
}
请注意,如果我在本地输入错误的密码并运行应用程序,我看不到1,即使报告错误,我也会看到空白页。
答案 0 :(得分: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
同样,您可以使用此模式来捕获引发此类错误的控制器类或模型中的Zend_Db
异常或PDO_Exceptions
,而不是整个应用程序
答案 1 :(得分:1)
转到拥有数据库代码的地方,并将try catch放在该代码中。如果您只想要Pdo Exceptions,那么只捕获PdoException。像catch一样(PdoExcetion_OR_What_Its_Name_Is $ e)(并将错误输出禁用到屏幕上。将错误写入日志文件)
答案 2 :(得分:1)
尝试捕获整个应用程序似乎很奇怪。禁用错误报告(例如php.ini中的display_errors)可以更好地停止从未捕获的异常中泄露任何敏感信息。
但要回答你的问题:
try {
$application->bootstrap()->run();
} catch (PDOException $e) {
print_r($e);
}
这应该只捕获PDO异常。