CodeIgniter Wildcard Query

Я пытаюсь выполнить подстановочный поисковый запрос с помощью CI.

Я проверяю вход в систему сессий. Если пользователь вошел в более чем одно устройство, появится всплывающее окно. Чтобы проверить, вошел ли пользователь в систему с какого-либо другого устройства, я выполняю запрос с подстановочными знаками, чтобы проверить наличие его идентификатора пользователя в столбце user_data и возвращаю количество строк. Проблема, с которой я сталкиваюсь, заключается в том, что даже если я вхожу в первый раз, он переходит к предложению else, а не к предложению if или if-else.

В моем контроллере я проверяю, достигает ли оно предложение else, отображать всплывающее окно. Тем не менее, это относится к предложению else, даже если кто-то регистрируется в первый раз.

Модель:

public function update_bool($id) {
        $this->db->select('user_data');
        $this->db->from('ci_sess');
        $this->db->like('user_data', $id, 'both');
        $counter = $this->db->get()->row();
            if (empty($counter)) $counter = 0; 
            else if($counter === 1) $counter = 1;
            else $counter = 3;
        return $counter;
    }

контроллер:

$counter = $this->ion_auth_model->loggedin_status_update_bool($userId);
        if($this->ion_auth_model->loggedin_status_update_bool($userId) === 3) {
          warning('multiple_session_title', 'multiple_session_text');
        }

2 ответа

Решение

Вам нужно посчитать количество строк, возвращаемых запросом. И на основании отсутствия записей, ваше состояние будет работать. В настоящее время возвращается одна строка типа array. And $counter as array to match else if condition will always fail.

Я надеюсь, что это поможет вам.

.... 
$query = $this->db->get();
$counter = $query->num_rows();
if (empty($counter)) {
  $counter = 0; 
}else if($counter === 1) {
   $counter = 1;
} else {
 $counter = 3;
}
return $counter;

Я думаю, что ваше сокращение может быть немного не так, и если я понимаю, что вы имеете в виду, то будет несколько сеансов для одного и того же пользователя в таблице, что означает, что вы не можете получить его с помощью ->row().

Попробуйте вот так:

public function update_bool($id) {
    $this->db->select('user_data');
    $this->db->from('ci_sess');
    $this->db->like('user_data', $id, 'both');
    $query = $this->db->get();

    return $query->num_rows(); // This will give you now many times this user exists in the database, eg 0, 1, 2, 3
}

Затем очистите свой контроллер, чтобы не вызывать базу данных дважды:

$counter = $this->ion_auth_model->loggedin_status_update_bool($userId);
if($counter == 3) {
      warning('multiple_session_title', 'multiple_session_text');
}
Другие вопросы по тегам