2011-12-24 6 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; 
} 

내 문제는 내가 잠시을 사용하여 반복하는 데 느릅 나무를 통해 결과 집합을 저장하고로드 할 필요가 있다는 것이다 (mysql_fetch_assoc()) - 루프 같은 :

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

이제 결과를 캐시에 저장해야하지만 $ res를 저장할 수 없기 때문에 결과를 먼저 가져와야합니다.

이미 가져온 결과 집합을 반복하는 방법은 무엇입니까? 나는 foreach-Loops를 약간 시도했지만 해결책을 찾지 못했습니다.

데이터베이스 결과에서 연관 배열의 배열을 가져 오려면 어떻게해야합니까?

답변

2

mysql_fetch_ * 함수는 한 번에 한 행씩 데이터를 가져옵니다. 그들은 전체 결과 집합을 반환하지 않습니다. 이를 위해 결과 집합을 반복하고 자신 만의 배열을 만들어야합니다.

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