2012-07-03 55 views
0

在我的zf應用程序中,我有基本模型類Application_Model,它連接到數據庫並將連接存儲在註冊表中。代碼 部分:我可以檢查我的數據庫是否還活着?

$db = Zend_Db::factory($registry['config']->$databaseAlias->db->adapter, $registry['config']->$databaseAlias->db->config->toArray()); 
     $db -> query('SET NAMES ' . $registry['config']->$databaseAlias->db->config->setnames); 
     $db -> setFetchMode(Zend_Db::FETCH_OBJ); 
     Zend_Registry::set('db', array($databaseAlias=>$db)); 

如果MySQL服務器關閉,$db -> query('SET NAMES ' . $registry['config']->$databaseAlias->db->config->setnames);拋出異常。那不是我想要的。 實際上我想檢查某種方式,如果我的數據庫死了 - 做一些行動; 有沒有辦法做到這一點?

+2

如果您不嘗試連接它,它無法知道它是否關閉。爲什麼不在連接代碼周圍放置一個'try..catch'模塊,並在服務器處於關閉狀態時處理服務器? – CodeCaster

回答

3

你可以拋出一個try/catch周圍的DB調用,如果它進入捕捉,做你想做

try 
{ 
    $db = Zend_Db::factory(
     $registry['config']->$databaseAlias->db->adapter, 
     $registry['config']->$databaseAlias->db->config->toArray() 
    ); 
    $db -> query('SET NAMES ' . $registry['config']->$databaseAlias->db->config->setnames); 
    $db -> setFetchMode(Zend_Db::FETCH_OBJ); 
    Zend_Registry::set('db', array($databaseAlias=>$db)); 
} catch(\Exception $e) { 
    // Database query failed, do logic here 
} 
+0

哦,如此明顯:) thx ,告訴我「不要在工作日結束時採取新的任務」)) – aloneibreak

+0

:)沒問題大聲笑 – Ascherer

相關問題