0

mysqlリンクなどを含むクラスがあります。フロントページをロードするときにこのクラスのオブジェクトを作成しますが、ページをリロードするときに再度作成したくありません。

mysqlセッションに保存できないため、オブジェクトをグローバルに保持する他の方法はありますか?

4

3 に答える 3

4

あなたが望むのは永続的なデータベース接続だと思います。

これには接続コードを少し修正する必要がありますが、手動で持続性を管理する必要はありません (つまり、手動でセッションに何かを追加する必要はありません)。

ただし、先に進む前に十分に読んでください。多くの意味があります。

于 2012-11-02T22:16:58.713 に答える
0

いくつかのオプション:

  • APC キャッシュを使用してオブジェクトをキャッシュする
  • serialize()オブジェクトをファイルに保存します。再度必要な場合は、ファイルを読み込んで呼び出しますunserialize()

この方法ではリソースを保存できないことに注意してください。他の人が述べたように、オブジェクトのその部分には永続的な接続を使用する必要があります。

編集mysql接続を保存できないという明らかな問題があり、コメントを取得しているため、これについて少し説明すると思いました。

データベース接続を含むオブジェクトを保存/復元する場合は、シリアル化できないビットを処理する必要があります。これを行うには、オブジェクトをシリアル化するときに属性を設定解除し、オブジェクトをシリアル化解除するときに属性を再作成します。PHP は、まさにこの目的のために__sleep()とという 2 つの便利なフックを提供しています。__wakeup()次のように使用できます。

class SaveableConnection {

    $connection = null;

    public function __construct() {
        $this->connect();
    }

    public function connect() {
        // read config and connect
        $this->connection = new PDO($dso);
    }

    public function __sleep() {
        // get rid of the bit that cant be saved
        unset($this->connection);
    }

    public function __wakeup() {
        // re-create the bit that wasn't save on disk
        $this->connect();
    }
}

永続的なデータベース接続を使用している場合$this->connection、関連するキャッシュから接続をコピーすることにより、 の値が最適化されます。

ファイルへの保存、memcached または APC でのキャッシュ、およびセッションなど、シリアル化を意味するオブジェクトの使用に対して、これと同じトリックを利用できます。

于 2012-11-02T22:15:36.187 に答える
0

MySQL への複数の接続を回避しようとしている場合は、mysql_pconnectで永続的な接続を使用できます。

「まず、接続時に、関数は最初に、同じホスト、ユーザー名、およびパスワードで既に開いている (永続的な) リンクを見つけようとします。見つかった場合、新しい接続を開く代わりに、その識別子が返されます。」

于 2012-11-02T22:17:00.457 に答える