2012-09-21 27 views
5

PHPの開発にZend Frameworkを使用していますが、ここではクエリを実行するために使用した小さな関数があります。これはエラーではありません。コードとすべて正常に動作します。しかし、私はこれの背後にあるいくつかの概念を知りたい。Zend DBのデータベース接続の管理方法

/** 
    * Get dataset by executing sql statement 
    * 
    * @param string $sql - SQL Statement to be executed 
    * 
    * @return bool 
    */ 
    public function executeQuery($sql) 
    { 
     $this->sqlStatement = $sql; 

     if ($this->isDebug) 
     { 
      echo $sql; 
      exit; 
     } 

     $objSQL = $this->objDB->getAdapter()->prepare($sql); 

     try 
     {   
      return $objSQL->execute(); 

     } 
     catch(Exception $error) 
     { 

      $this->logMessage($error->getMessage() . " SQL : " .$sql); 
      return false; 
     } 
     return false; 
    } 

ベローは私にとって不明な部分です。

  1. どのようにZend_Db_Table_Abstractデータベース接続を維持しますか?
  2. この関数を呼び出すと常に新しい接続が作成されていますか、または接続プールがありますか?
  3. データベース接続を開いたり閉じたりするためのコードは書きませんでした。フレームワークを自動的に接続を閉じるzendですか?
  4. この機能を実行すると、このオープンおよびクローズ接続が常に機能する場合、パフォーマンスに問題はありますか?

ご協力いただきありがとうございます。

答えて

15

すぐRDBMSサーバーに接続していないアダプタクラスのインスタンスを作成する接続

作成。アダプタは接続パラメータを保存し、実際の接続をオンデマンドで行います。初めてクエリを実行する必要があります。これにより、アダプタオブジェクトの作成が迅速かつ安価に行われます。アプリケーションの現在の要求中にデータベース照会を実行する必要があることが確実でない場合でも、アダプターのインスタンスを作成できます。

強制的にアダプタをRDBMSに接続する必要がある場合は、getConnection()メソッドを使用します。このメソッドは、それぞれのPHPデータベース拡張で表されるように、接続用のオブジェクトを返します。たとえば、PDOドライバのアダプタクラスを使用する場合、getConnection()は、特定のデータベースへのライブ接続として開始した後にPDOオブジェクトを返します。

無効なアカウント資格情報やRDBMSサーバーへの接続に失敗したためにスローされる例外をキャッチする場合は、接続を強制すると便利です。これらの例外は、接続が確立されるまでスローされないため、データベースに対する最初の問合せ時ではなく、1か所で例外を処理すると、アプリケーション・コードを簡素化できます。

さらに、アダプタをシリアル化して、たとえばセッション変数に格納することができます。これは、アダプタ自体だけでなく、Zend_Db_Selectオブジェクトのように、それを集約する他のオブジェクトにとっても非常に便利です。デフォルトでは、アダプタのシリアル化は許可されていますが、必要がない場合は、Zend_Db :: ALLOW_SERIALIZATIONオプションをFALSEで渡すことを検討してください。上記の例を参照してください。レイジー接続の原則を尊重するために、アダプタはシリアル化されていない状態では再接続しません。次に、getConnection()を自分で呼び出す必要があります。アダプタオプションとしてTRUEを指定してZend_Db :: AUTO_RECONNECT_ON_UNSERIALIZEを渡すことで、アダプタを自動再接続させることができます。

は通常、データベース接続をクローズする必要がなく、接続を閉じる

。 PHPは自動的にすべてのリソースとリクエストの終了をクリーンアップします。データベース拡張は、リソースオブジェクトへの参照がクリーンアップされると接続を閉じるように設計されています。

しかし、多くのデータベース接続を開始する長いPHPスクリプトがある場合は、RDBMSサーバーの容量を使い果たしないように、接続を閉じる必要があります。アダプタのcloseConnection()メソッドを使用して、基になるデータベース接続を明示的に閉じることができます。

リリース1.7.2以降、isConnected()メソッドを使用して現在RDBMSサーバーに接続していることを確認できます。これは、接続リソースが開始され、閉じられていないことを意味します。この機能では、現在、接続のサーバー側を閉じるなどのテストはできません。これは内部的に接続を閉じるために使用されます。これにより、エラーなしで接続を複数回閉じることができます。 PDOアダプタでは1.7.2より前のケースでしたが、他のアダプタではそうではありませんでした。

More information

関連する問題