2010-12-03 64 views
0

我想知道如果我可以把一个尝试捕捉约$application->bootstrap()->run();
,将捕获pdo exceptions捕捉Zend的PDO异常

这工作,但它抓住每一个例外,我不想要的。

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

我有一个令人讨厌的事件,pdo异常抛出并显示来自application.ini的密码!

值得一提的是,我尝试了PDOException,它不会被捕获。

我的DB是建立在引导的run()与

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

需要注意的是,如果我放错了密码在本地并运行应用程序,我不看,1,我看到一个空白页,即使错误报告。

回答

1

转到你有数据库代码的地方,并试着绕过那段代码。如果你只想要Pdo异常,那么只捕获PdoException。把一些东西像catch(PdoExcetion_OR_What_Its_Name_Is $ e)(并且禁用错误输出到屏幕上,把你的错误写到日志文件中)

+1

更新我的帖子,以反映我曾试过与此有关。 – 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

尝试捕获整个应用程序似乎很奇怪。禁用错误报告(例如php.ini中的display_errors)会更好地阻止显示未捕获异常的任何敏感信息。

但是,为了回答你的问题:

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功能正试图连接到数据库的参数,如果它失败 它会抛出一个Zend_Db_Adapter_Exception,如果连接成功将返回PDO object

同样,你c使用这种模式来捕捉你Zend_Db例外或PDO_Exceptions在控制器类或模型,抛出这些类型的错误,但不是整个应用程序