2011-12-24 4 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()) - Loop как:

$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; 
}