2011-11-15 3 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

'선택 1'과 같이 간단하게 실행 해보십시오. 오류가 발생하지 않으면 연결이 열려 있습니다. –

+0

답장을 보내 주셔서 감사합니다. –

답변

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은 db 설정이 동일하게 유지되고 이미 활성 Zend_Db_Adapter 객체 인 경우

db 연결을 사용하여 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" 
관련 문제