2015-12-23 14 views
5

Web sayfamda kullanmak için bir önbellek sınıfı kullanmaya çalışıyorum.getirme, önbellekten aldığımda yalnızca bir satır döndürür

Basit mantık böyledir: yoksa

  • :

    deneyin önbellekten verileri almak için çalıştırmak sorgu ve bir önbellek olarak ayarlayabilirsiniz.

  • Varsa: verileri önbellekten görüntüleyin.

kodum

<?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>"; 
} 

?> 

benim çıkış ve problem

Ben iki satır var.

Onları sorgudan aldığımda, kodum her ikisini de çıkarır. Hangisi güzel.

row1 
row2 

Ancak sayfa önbelleğe getirdiğinde, yalnızca son satırı verir. Tanımlanmamış indeks: id hatası i

Ben fetchAll() yerine fetch() işlevini ama Bildirimi alıyorum bu kez kullanmaya çalıştı çalıştığınız şeyi

row2 

.

Bu yüzden takılıyorum ve yardımınıza ihtiyacım var.

+0

kullanırsanız, tüm kayıtlar için her kaydın veya önbelleği için önbelleğe sahip istiyoruz? –

+0

Sorunuzu 'Cache' sınıfının' get' ve 'set' yöntemiyle güncelleyin? –

+0

@MaxP. Tüm kayıtları bir kerede önbelleğe almak istiyorum. – LetsSeo

cevap

4

seferde tüm kayıtlar için, 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>"; 
İlgili konular