Memcached没有正确地返回存储的数据codeigniter 3

问题描述:

我正在使用memcached在bot上存储消息的一些数据,然后将其存储到rethindkb表中。 我有我写的用于存储下面的代码,还有一个用于检索数据的函数。Memcached没有正确地返回存储的数据codeigniter 3

在第一所述准备数据的方法的第一步骤中(情况0)中,i建立一个数组,如本

`[id = 123]` 

并将其存储在分布式缓存 在第二步骤中的方法的(情况1)我检索所存储的数据,然后另一元件附加到数据,它看起来像这样

[id = 123, lang = english] 

在getPrepData功能,我检索该数据,以便检索所存储的存储阵列的键的值。然而,当我检索数据,并将其存储在日志中,郎键不和它看起来像这样

[id = 123] 

出于调试目的,存储郎键后,我拿来从memcached的数据和记录它和我得到了期望的输出。 使用PHP 7和codeigniter 3.

任何人都知道为什么会发生这种情况,我该如何解决它?

<?php 
class User extends CI_Model { 
    private $data; 
    private $prep_data; 
    public function __construct(){ 

    } 

    public function is_registered($id){ 
    require_once('application/third_party/rdb/rdb.php'); 
    $this->load->config('redb.php'); 
    $db = $this->config->item('redbdb'); 
    $con = r\connect(array('host' => 'localhost','db' => $db)); 
    $results = r\table('users')->filter(['tid' => $id])->count()->run($con); 
    if($results == 0){ 
     return false; 
    } 
    return true; 
    } 

    public function register_prep($id,$step,$store=null){ 
    $this->load->driver('cache'); 

    switch($step){ 
     case(0): 
     //Insert empty cache entry 
     $x = $this->cache->memcached->get('prep_'.$id); 
     if($x){ 
     $this->cache->memcached->delete('prep_'.$id); 
     } 
     $prep = ['tid' => $id]; 
     $this->cache->memcached->save('prep_'.$id,$prep,0); 
     break; 

     case(1): 
     //insert language 
     $prep = $this->cache->memcached->get('prep_'.$id); 
     $prep['lang'] = $store; 
     $this->cache->memcached->delete('prep_'.$id); 
     $this->cache->memcached->save('prep_'.$id,$prep,0); 
     $x = $this->cache->memcached->get('prep_'.$id); 
     log_message('error','saved data on step 1 is : '.print_r($x,true)); 
     break; 

     case(2): 
     //Insert driver/passenger 
     $prep = $this->cache->memcached->get('prep_'.$id); 
     $prep['type'] = $store; 
     $this->cache->memcached->save('prep_'.$id,$prep,0); 
     break; 

     case(3): 
     //Insert contact 
     $prep = $this->cache->memcached->get('prep_'.$id); 
     $prep['contact'] = $store; 
     $this->cache->memcached->save('prep_'.$id,$prep,0); 
     break; 

     case(4): 
     //Finish 
     $prep = $this->cache->memcached->get('prep_'.$id); 
     //Insert to database 
     require_once('application/third_party/rdb/rdb.php'); 
     $this->load->config('redb.php'); 
     $db = $this->config->item('redbdb'); 
     $con = r\connect(array('host' => 'localhost','db' => $db)); 
     r\table('users')->insert($prep)->run($con); 
     //Delete from cache 
     $this->cache->memcached->delete('prep_'.$id); 
     break; 
    } 
    } 

    public function getPrepdata($id,$var){ 
    $this->load->driver('cache'); 
    $x = $this->cache->memcached->get('prep_'.$id); 
    log_message('error','fetched prep data is : '.print_r($x,true)); 
    return $x[$var]; 
    } 

}

可以尝试这个例子:

$data = array(id => 123); 
if(empty($data)){ 
    $data = array(); // Declaring array 
} 
print_r($data); 

结果: 阵列( ID => 123 )

现在补充一点:

$new_data = array(lang => english); 

array_push($data,$new_data); // Items will be add to array 

print_r($data); 

阵列( ID => 123, LANG =>英语 )

你想要得到的只是身份证号码:

echo $data['id']; 
+0

你甚至看他的问题? – sintakonte