2011-11-15 53 views
3

正在開發一個Zend應用程序,我需要保留數據庫對象的單個實例,並在當前實例斷開連接時重新連接。下面是代碼:如何檢查Zend_Db_Adapter_Pdo_Mysql對象是否連接到數據庫

class Resource_PdoMysql extends Zend_Application_Resource_ResourceAbstract 
{ 
    const KEY = 'PDO_MYSQL'; 

    private static function connect() 
    { 
     $connParams = array("host" => host, 
     "port" => 'port', 
     "username" => 'username', 
     "password" => 'password', 
     "dbname" => 'dbname'); 
     $db = new Zend_Db_Adapter_Pdo_Mysql($connParams); 
     return $db; 
    } 
    public static function getConnection() 
    { 
     if (!Zend_Registry::isRegistered(self::KEY)) 
     { 
       $db = self::connect(); 
       Zend_Registry::set(self::KEY, $db); 
     } 

     return Zend_Registry::get(self::KEY); 
    } 

    public static function reconnect() 
    { 
     $db = self::connect(); 
     Zend_Registry::set(self::KEY, $db); 
    } 

    public function init() 
    { 
     return self::getConnection(); 
    } 

}

Am using $db like this 
$db = Resource_PdoMysql::getConnection(); 
// <Here I need to check if the connection is open before proceeding> 
$db->insert('table', $data); 
+0

嘗試運行一些簡單的東西,比如'select 1'。如果沒有出錯,則連接打開。 –

+0

感謝您的回覆Marc。 –

回答

4

按照Zend_Db_Adapter documentation,你可能會調用適配器getConnection()方法之後捕捉異常。這是從實例中複製粘貼摘錄:

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 
} 

希望幫助,

+0

感謝評論dinopmi。我真的想知道如何檢測連接何時被丟棄,以便我可以重新連接。也許它會自動完成,但我只是想確保採取正確的方法。 –

1

我不知道爲什麼你需要這個。

如果您使用的是標準ZF引導,則Zend_Application_Bootstrap_Bootstrap將爲您管理數據庫連接。

如果沒有活動連接,Zend_Db::factory會自動爲您創建一個連接。同時,Zend_Db不會創建另一個連接,如果你的數據庫的設置保持不變,並且已經有一個活躍的Zend_Db_Adapter對象

你需要有與數據庫連接你的application.ini一個部分,並引導將處理家居您。

resources.db.adapter   = "pdo_mysqli" 
resources.db.params.host  = "localhost" 
resources.db.params.dbname  = "db" 
resources.db.params.username = "user" 
resources.db.params.password = "pass" 
相關問題