2010-12-03 66 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在控制器類或模型,拋出這些類型的錯誤,但不是整個應用程序