fetch возвращает только одну строку, когда я получаю ее из кэша

Я пытаюсь принять кеш-класс для использования на моей веб-странице.

Простая логика такая:

Попробуйте получить данные из кеша:

  • Если нет: запустите запрос и установите его в качестве кэша.
  • Если есть: показать данные из кеша.

мой код

<?php
// Require Library
require_once("phpfastcache.php");
$cache = phpFastCache();

//lets get it from cache.
$r = $cache->get("cachethis");

if($r == null) {

echo " THIS TIME RUN WITHOUT CACHE <br> ";
$time_start = microtime(true);

$query = $handler->query("SELECT * FROM members");
while($r = $query->fetch(PDO::FETCH_ASSOC)) {

//echo
echo "$r[id]";

//lets cache query above.
$cache->set("cachethis", $r, 10);

}

$time_end = microtime(true);
$time = ($time_end - $time_start);
echo "<p>done in " . $time . " seconds</p>";

}
//if ($r != null)
else {
echo "RUN WITH CACHE. YES.<br>  ";
$time_start = microtime(true);

//echo from cache..
echo "$r[id]";
$time_end = microtime(true);
$time = ($time_end - $time_start);
echo "<p>cache done in " . $time . " seconds</p>";
}

?>

мой вывод и проблема

У меня есть два ряда.

Когда я получаю их из запроса, мой код выводит их обоих. Что приятно.

row1
row2

Но когда страница выводит его мне из кэша, она выводит только последнюю строку.

row2

что я пробовал

Я пытался использовать fetchAll() функция вместо fetch() но на этот раз я получаю уведомление: неопределенный индекс: ошибка идентификатора.

Так что я застрял и мне нужна твоя помощь.

5

Решение

если для всех записей одновременно, используйте fetchAll

$r = $cache->get("cachethis");

if(!is_array($r)) {
// not in cache, from db
$query = $handler->query("SELECT * FROM members");
$r = $query->fetchAll(PDO::FETCH_ASSOC);
$cache->set("cachethis", $r, 10);
}

foreach($r as $v) echo $v['id']."<br>";
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]