首頁  >  文章  >  php教程  >  ecshop 資料庫查詢快取詳解

ecshop 資料庫查詢快取詳解

黄舟
黄舟原創
2016-12-14 16:29:441902瀏覽

查詢快取檔案在ecshop/upload/temp/query_cache目錄下面
在ecshop/upoad/下面寫一個測試檔案test1.php教學,用來測試它的查詢快取。
程式碼如下:
 
Php程式碼 
1. 2. //前面三句主要是做些初始化工作,讓我可以用ecshop裡面的類別函式庫函數等  
3. define('IN_ECS', true );  
4. define('ECS_ADMIN', true);  
5. require(dirname(__FILE__) . '/includes/init.php');  
6. /******* 
7. 這裡的GetALLCached函數裡面帶了一個sql語句的參數, 
8. 這裡可以先簡單的把這個函數理解成執行sql查詢取得結果的運算。 
9. *******/ $article_array = $db->GetALLCached("SELECT article_id, title FROM " . $ecs->table("article") . " WHERE cat_id != 0 AND is_open = 1 AND open_type = 0 ORDER ESC 70 月");  
11.   

12. print_r($article_array);  

13. //印出的陣列結果如下  
14. /* 
15. Array 
18 .         ( 
19.             [article_id] => 35 
20.          ) 
22.  
23.     [1] => Array 
24.       article_id] => 34 
26.             [title] => 3G知識普及 
27.         ) 
27.       
30.         ( 
31.             [article_id] => ] => 手機遊戲下載 
33.         ) 
34.  
35.     [3] =>        [article_id] => 31 
38.             [title] =>諾基亞6681手機廣告欣賞 
39 .         ) 
40.  
41. */  
42. ?>  
 
 1. 1273944294a:4:{i:0;a:2:{s:10:"article_id";s:2:"35";s:5:"title";s:27:" 「沃」的世界我做主";}i:1;a:2:{s:10:"article_id";s:2:"34";s:5:"title";s:14:"3G知識普及";}i:2;a:2:{s:10:"article_id";s:2:"32";s:5:"title";s:18:"手機遊戲下載";}i: 3;a:2:{s:10:"article_id";s:2:"31";s:5:"title";s:31:"諾基亞6681手機廣告欣賞";}}  
 
 發現是一串經過什麼處理的東西(其實是經過serialize函數處理)
這個sqlcache裡面的東西其實就是剛才印出來的print_r($article_array)的結果。
在剛才的test1.php檔案中使用了$db->GetALLCached()這個函數
它來自ecshop/upload/includes/cls_mysql教學.php檔案中
GetALLCached()該函數會呼叫到2個實際來處理快取(就是剛才的sqlcache檔)的函數。
第一個函數是setSqlCacheData
 
Php程式碼 
1.       
2. /* 
3. 設定查詢快取的函數,如果GetALLCached函數參數中結果的被程式碼的,此函數的作用是將sql取得的結果陣列經過序列化以後儲存在某個路徑下方 
4. */

5.函數setSqlCacheData($result, $data)
6.     {  
7.         if ($result[) . 
9.             @file_put_contents ($result['filename'], '' .time() .serialize($data));  
10。             清除統計儲存();  
11。         }  
12.     }  
 第二個函數是getSqlCacheData
Php代碼
1. /******* 
2.  
3. 此函數的主要功能是從sqlcache資料庫查詢快取檔案中將序列化過的檔案還原。 
4. 這樣就如果再執行某條sql語句,該sql語句的結果已經被快取下來,就不用再去資料庫查詢了,直接去快取檔案中讀取。 
5. ******/  

 函數 getSqlCacheData($sql, $cached = '')  
7.     {  
8.         $sql = 修剪($sql);  
9.   
10。  
11。 $this->cache_data_dir 。  
12。  
14。         {  
16。  
17。  
18。 FIRST' && $this->table_lastupdate($this- >get_table_name ($sql)) > $filetime))
20。              {  
21。  
22。               $結果['資料'] = @unserialize($data);  
26。                 {  
28。  
29。    {  
32。  
33。        其他
37。             $結果['storecache'] = 真;  
39。 .php.cn)!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn