2012-09-12 102 views
1

例如,在這種情況下,會話期間'views'計數顯然遞增正常,但mysqli對象不會被維護,並且在會話期間不能重新使用(如果頁面已刷新或其他)。 _SESSION全局只能保存簡單的類型嗎?還有什麼可以限制呢?編輯:我希望在這裏提高性能。所以如果有另一種方法來實現這一點,我很樂意知道。是否可以在php中的會話中保存mysql對象?

<?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'];  

?> 
+1

'$ _SESSION'只保存簡單類型和序列化數據。雖然它可以保存一個對象,但它不能保存對象的狀態或值。刷新頁面時,還會刷新'$ _SESSION'值,這意味着新的對象實例。 –

+2

你爲什麼需要這個?這個嘗試背後有什麼真正的問題? – zerkms

+0

@zerkms - 我希望通過不重新建立連接來提高性能。如果有辦法做到這一點,請讓我知道。 – glutz

回答

3

不,沒有一個PHP資源是可序列化的。所以你需要每次實例化對象mysqli

編輯:我希望在這裏提高性能。

頭號性能優化規則是:第一次測量 - 第二次優化。沒有分析(測量),世界上沒有人可以說出什麼是性能問題。

那麼,你的應用程序的工作是不是很慢?那麼,衡量是什麼讓它變得如此緩慢,並優化這個特定的地方。我可以向你保證這不是連接到MySQL。

+0

好吧,我只是假設。但我會分析它。我很驚訝地聽到db連接不是瓶頸。謝謝。 – glutz

+0

@glutz:瓶頸通常是db查詢,但正如我所說的,在開始優化之前需要進行測量。 – zerkms

0

你不能直接這樣做。但是你可以使用神奇的方法:__sleep() and __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(); 
    } 
} 

我認爲在會議中不這樣做是必要的。

+0

這沒有意義。 – zerkms

相關問題