2011-12-24 18 views
0

mysqlの結果をキャッシュして、データベースの負荷を軽減したい。キャッシュ結果、私は次の関数を使用していますへ :連想配列の配列をキャッシュして繰り返し処理する

$cached = $this->getMemCacheX($name); 

if ($cached === false) 
{ 
    $res = mysql_query($query, $con) or die(mysql_error()); 
    if ($res === false) exit('Database failure.'); 
    if ($fetch === "assoc") 
    { 
     $data = mysql_fetch_assoc($res); 
    } 
    else if ($fetch === "array") 
    { 
     $data = mysql_fetch_array($res); 
    } 
    if (mysql_num_rows($res) === 0) $data = 0; 
    $cr = $this->saveMemCacheX($name, $data); 
    if ($cr === false) exit('Cache failure.'); 
    return $data; 
} 
else 
{ 
    return $cached; 
} 

私の問題は、私は私はしばらくの間を使用して反復するために使用WICH上で結果セットを保存してロードする必要があるということです(mysql_fetch_assoc()) - ループのように:

$res = mysql_query("..."); 
while ($data = mysql_fetch_assoc($res)) 
{ 
... 
} 

は今、私はキャッシュに私の結果を格納する必要がありますが、私は$ RESを格納することはできませんので、私は最初の結果を取得する必要があります。

すでにフェッチされた結果セットを反復処理する方法はありますか?私はいくつかのforeach-Loopsを試しましたが、解決策は見つかりませんでした。

データベース結果から連想配列の配列を取得するには、どのように結果を取得する必要がありますか?

答えて

2

mysql_fetch_ *関数は、一度に1行ずつデータをフェッチします。結果セット全体を返しません。そのためには、結果セットをループして独自の配列を作成する必要があります。

$data = array(); 
while($row = mysql_fetch_assoc($result)) { // fetch as an associative array 
    $data[] = $row; 
}