1

たとえば、この場合、「ビュー」カウントは明らかにセッション中に適切に増加していますが、mysqli オブジェクトは維持されず、セッション中に再利用できません (ページが更新された場合など)。_SESSION グローバルは単純型のみを保持できますか? 他に何がこれを制限している可能性がありますか? 編集:ここでの私の希望は、パフォーマンスを向上させることです。そのため、これを達成する別の方法があれば、喜んでお知らせします。

<?php
session_start();

if(isset($_SESSION['db']))
{
    $mysqli = $_SESSION['db'];
    $_SESSION['views']=$_SESSION['views']+1;
}
else
{
    $mysqli = new mysqli(...);
    $_SESSION['db'] = $mysqli;
    $_SESSION['views']=1;
}

echo "Views=". $_SESSION['views'];    

?>
4

2 に答える 2

3

いいえ、どの PHP リソースもシリアライズ可能ではありません。mysqliしたがって、毎回オブジェクトをインスタンス化する必要があります。

編集:ここでの私の希望は、パフォーマンスを向上させることです。

一番のパフォーマンス最適化ルールは、最初の測定 - 2 番目の最適化です。プロファイリング (測定) なしに、パフォーマンスの問題が何であるかを言うことは、世界中の誰にもできません。

それで、あなたのアプリケーションは許容できないほど遅く動作しますか? さて、何がそんなに遅いのかを測定し、その特定の場所を最適化します. そして、それが mysql への接続ではないことを保証できます。

于 2012-09-12T02:47:58.403 に答える
0

これを直接行うことはできません。しかし、魔法のメソッドを使用できます:__sleep()__wakeup().

class Connection {
    protected $link;
    private $server, $username, $password, $db;

    public function __construct($server, $username, $password, $db) {
        $this->server = $server;
        $this->username = $username;
        $this->password = $password;
        $this->db = $db;
        $this->connect();
    }

    private function connect() {
        $this->link = mysql_connect($this->server, $this->username, $this->password);
        mysql_select_db($this->db, $this->link);
    }

    public function __sleep() {
        return array('server', 'username', 'password', 'db');
    }

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

セッションでそうする必要はないと思います。

于 2012-09-12T02:52:28.727 に答える