0

これは私を夢中にさせています。問題は、キャッシュされたデータを取得してビュー内に表示するように設定する方法がわからないことです。

public function get_something($id, $account_name)
{
    $sql = "SELECT one,two,three FROM table WHERE id = ? and account_name = ? ";
    $key = md5("SELECT one,two,three FROM table WHERE id = $id and account_name = $account_name ");

    $get_result = $this->Core->Core->Memcache->get($key);

    if($get_result)
    {
      // How would I set the Data
    }
    else
    {
     $stmt = $this->Core->Database->prepare($sql);
     $stmt->bind_param("is", $id, $account_name);
     $stmt->execute();
     $stmt->store_result();
     $stmt->bind_result($one, $two, $three);
     $stmt->fetch();
     //Below is how i set the data
     $this->Core->Template->set_data('one', $one);  
     //Set the Memcache
     $this->Core->Memcache->set($key, $stmt, TRUE, 20);
}

だから私の質問は、memcache内のプリペアドステートメントフェッチからデータを取得して設定するにはどうすればよいですか?

4

1 に答える 1

0

Memcacheは、キーと値の両方をシリアル化する必要があるキー/値ストレージシステムです。php.netページから:

リソース変数(つまり、ファイルおよび接続記述子)は、シリアル化された状態で適切に表現できないため、キャッシュに格納できないことに注意してください。

SQLステートメントが1行で3つの値を探しているようです。私はmysqliの専門家ではありませんが、これはあなたがやりたいことの一種です。

public function get_something($id, $account_name){
  $sql = "SELECT one,two,three FROM table WHERE id = ? and account_name = ? ";
  $key = md5("SELECT one,two,three FROM table WHERE id = $id and account_name = $account_name ");

  $get_result = $this->Core->Core->Memcache->get($key);

  if($get_result){
    return $get_result;//#1 just return it, the format is an array like what is being built below
  }
  else{
   $stmt = $this->Core->Database->prepare($sql);
   $stmt->bind_param("is", $id, $account_name);
   $stmt->execute();
   $stmt->store_result();
   $stmt->bind_result($one, $two, $three);
   $stmt->fetch();
   //Below is how i set the data
   $this->Core->Template->set_data('one', $one);//#2 I don't know what this line does or is for, presumably for something else besides memcache stuff, maybe it acts like return
   //Set the Memcache
   $array=array();//#3
   $array[]=$one;
   $array[]=$two;
   $array[]=$three;

   $this->Core->Memcache->set($key, $array, TRUE, 20);
   //this is a function, do you want to return your values somewhere?
 }

いくつかの注意事項、#1あなたの質問への答えは簡単です。ただ返すだけ$get_resultです。3つの値を持つ配列である必要があります。#2私はこの行に精通しておらず、それが何をするのかよくわかりません。これは、値をコントローラーに「返す」方法ですか?もしそうなら、あなたは私が #3のreturn中に入れたその線を模倣したいと思うでしょうこれはあなたの問題です。if変数をmemcacheに保存することはできません$stmt。これは、必要なデータではなく、mysqliオブジェクトです。配列を作成してから、その配列を保存する必要があります。そして、それはあなたのためにそれをするはずです。

他にもやるべきニュアンスがあり、戻り値をループすることができます。mysqlが何も返さないことを確認する必要があります。しかし、これがこれを実現するための基本的な出発点です。

これがあなたのために働くかどうか私に知らせてください。

于 2013-02-06T00:09:58.113 に答える