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所以每次都需要实例化对象。

编辑:我的希望是提高性能。

第一个性能优化规则是:第一次测量 - 第二次优化。如果不进行分析(测量),世界上没有人可以说出性能问题是什么。

那么,您的应用程序运行缓慢吗?那么,衡量是什么让它如此缓慢并优化那个特定的地方。我可以向你保证,这不是与 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 回答