CodeIgniter通配符查询

时间:2017-02-22 10:55:05

标签: php mysql codeigniter wildcard-expansion

我正在尝试使用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 个答案:

答案 0 :(得分:1)

您需要计算查询返回的行数。并且基于没有记录,您的情况将起作用。目前它返回一行类型数组。 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;

答案 1 :(得分:0)

我认为你的速记可能有些偏差,如果我理解你的意思,那么表中同一个用户会有多个会话,这意味着你无法使用 - > 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');
}