2015-12-23 2 views
5

私のWebページで使用するキャッシュクラスを採用しようとしています。キャッシュから取得したフェッチは1行だけを返します。

シンプルなロジックというようなものです:存在しない場合

  • :実行クエリをキャッシュとしてこれを設定

    は、キャッシュからデータを取得してください。

  • キャッシュからのデータを表示します。私は2つの行を持って私のコード

    <?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 

しかし、ページがキャッシュから私を呼び出すと、最終行だけが出力されます。未定義のインデックス:IDエラー私は私が代わりにfetch()fetchAll()機能を使用しようとしましたが、今回は私が注目して取得しています

を試してみました何

row2 

だから私は立ち往生し、あなたの助けが必要です。

+0

を使用する場合は、すべてのレコードのすべてのレコードやキャッシュのためのキャッシュを持っていたいですか? –

+0

あなたの質問を 'Cache'クラスの' get'メソッドと 'set'メソッドで更新しますか? –

+0

@ MaxP。私は一度にすべてのレコードをキャッシュしたい。 – LetsSeo

答えて

4

一度にすべてのレコードに対して、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>"; 
関連する問題