5

私は PHP の開発に Zend Framework を使用しています。クエリの実行に使用した小さな関数を次に示します。これはエラーに関するものではありません。コードとすべてが正常に動作します。しかし、私はこの背後にあるいくつかの概念を知りたい.

/** 
    * 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. この関数を実行すると、この開閉接続が常に機能する場合、パフォーマンスの問題はありますか?

これに関するご提案やご意見に感謝いたします。

4

1 に答える 1

15

接続の作成

Adapterクラスのインスタンスを作成しても、RDBMSサーバーにすぐには接続されませんアダプタは接続パラメータを保存し、最初にクエリを実行する必要があるときに、オンデマンドで実際の接続を確立します。これにより、Adapterオブジェクトの作成が迅速かつ安価になります。アプリケーションが処理している現在のリクエスト中にデータベースクエリを実行する必要があるかどうかわからない場合でも、アダプタのインスタンスを作成できます。

アダプタを強制的にRDBMSに接続する必要がある場合は、getConnection()メソッドを使用します。このメソッドは、それぞれのPHPデータベース拡張機能で表される接続のオブジェクトを返します。たとえば、PDOドライバーにAdapterクラスのいずれかを使用する場合、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より前にすでに当てはまりましたが、他のアダプターの場合はそうではありませんでした。

詳しくは

于 2012-09-21T07:12:38.503 に答える