2011-11-05 94 views
1

我正在嘗試將一些速度性能添加到我正在使用memcache的項目中。但是我在與以下Memcache + Mysqli無法獲取mysqli_result

public function sql_query($query){ 

    $memcache = new Memcache; 
    $memcache->connect('localhost', 11211) or die ("Could not connect"); 

    $memkey = md5($query); 

    $get_result = $memcache->get($memkey); 

    if ($get_result){ 
     return $get_result; 
    } else { 

     $q = $this->mysqli->query($query); 

     $memcache->set($memkey, $q, false, 120) or die ("Failed to save data at the server"); 

     if ($this->mysqli->error){ 
      App::Error($this->mysqli->error); 
     } 

     return $q; 
    } 

} 

那肯定是把東西放到memcached的一個問題,但它拉回來的時候了,我得到這個錯誤,並把它作爲我想如果它從緩存中沒有。

"Warning: mysqli_result::fetch_assoc(): Couldn't fetch mysqli_result" 

我錯過了什麼嗎?我確信我之前以類似的方式使用了memcache,沒有任何問題。

+0

您應該緩存來自mysqli結果的記錄,例如'$ memcache-> set($ memkey,$ q-> fetch_all(),false,120);'。 – MacMac

回答

3

不能將所有數據類型存儲到memcached(以及其他數據存儲區),其中最常不起作用的數據類型是resources Docs,例如數據庫鏈接或結果標識符。

您存儲了這樣一個值,並在另一個請求中再次將其拉出。但是,由於數據庫已經處於另一個狀態,此資源不再起作用。那麼你會得到錯誤。

取而代之,您需要存儲來自查詢的結果數據,這是可以放入memcache的靜態數據。