Memcached не возвращает сохраненные данные правильно codeigniter 3

Я использую memcached для хранения некоторых данных из сообщений на боте, а затем позже сохраняю их в таблицу rethindkb.
У меня есть код, который я написал для хранения ниже, также есть функция для извлечения данных.

На первом первом шаге (случай 0) метода подготовки данных я создаю такой массив, как этот

`[id = 123]`

и сохранить его в memcached
На втором шаге (случай 1) метода я извлекаю сохраненные данные и затем добавляю к данным еще один элемент, это выглядит так

[id = 123, lang = english]

В функции getPrepData я извлекаю эти данные, чтобы извлечь значение ключа из хранимого сохраненного массива. Однако, когда я извлекаю данные и сохраняю их в журнале, ключ lang не устанавливается и выглядит так

[id = 123]

В целях отладки, после сохранения ключа lang, я получил данные из 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];
}

}

1

Решение

Вы можете попробовать этот пример:

$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'];
-2

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

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

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