2011-11-15 13 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は、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" 
関連する問題