2011-11-15 34 views
0

我試圖使用memcache,但我被困在一小部分。我有一個函數在結果中給出了幾個東西的數組(其中大部分是字符串),其中一個是mysql_query()函數的結果。 這裏是我在嘗試反序列化:在mysql_fetch_array之前序列化?

$posts_count = my query;     

    /* MEMCACHE KEY GEN*/ 
    $memcache_key = md5($posts); 
    $pagination = memcache_get($memcache, $memcache_key); 
    if($pagination==NULL) { 
     echo 'NOT CACHED'; 
     $pagination = (the function that will call mysql_query) 
     //SAVE A SERIALIZED VERSION OF THE ARRAY 
     $memcache->set($memcache_key, serialize($pagination), 0, 3600); 
    } 
    else { 
     $pagination = unserialize($pagination); 
    } 

    //THIS IS ONLY THE RESULT OF mysql_query!!!  

    $posts = $pagination[result]; 
    while($var = mysql_fetch_array($posts)) { ... stuffs here } 

如何「拯救」的mysql_query這個結果mysql_fetch_array之前的任何想法?或者任何想法如何使用memcache來緩存整個while循環?

+1

你不能序列化的資源。結束。 – DaveRandom

+0

好的,但是有沒有辦法在while循環中使用memcache? –

回答

1

怎麼是這樣的:

$posts_count = "my query";     

/* MEMCACHE KEY GEN*/ 
$memcache_key = md5($posts); 
$pagination = memcache_get($memcache, $memcache_key); 
if ($pagination == NULL) { 
    echo 'NOT CACHED'; 
    $pagination = function_that_will_call_mysql_query(); 
    // Create an array of all the results 
    $data = array(); 
    while ($row = mysql_fetch_assoc($pagination['result'])) { 
    $data[] = $row; 
    } 
    $pagination['result'] = $data; 
    //SAVE A SERIALIZED VERSION OF THE ARRAY 
    $memcache->set($memcache_key, serialize($pagination), 0, 3600); 
} else { 
    $data = unserialize($pagination); 
} 

// THIS IS ONLY THE RESULT OF mysql_query!!! (but now it's an array) 

$posts = $pagination['result']; 
while ($var = array_shift($posts)) { 
    // ... do stuff here 
} 
+0

會提出類似的建議,但是OP很混亂。希望它堅持下去。 –

+0

完美!我永遠不會想到array_shift!非常感謝 ! :) –

+0

嘿@DaveRandom請看看這個: http://stackoverflow.com/questions/9798949/php-serialize-function-adding-serialized-data-to-mysql-and-then-fetch-and-disp 如果你可以幫忙... –

相關問題