CodeIgniter 通配符查询
CodeIgniter Wildcard Query
我正在尝试使用 CI 执行通配符搜索查询。
我正在检查登录会话。如果用户登录到多个设备,则会显示一个弹出窗口。为了检查用户是否从任何其他设备登录,我执行通配符查询以检查 user_data 列中是否存在其用户 ID 和 return 行数。我面临的问题是,即使我是第一次登录,它也会转到 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');
}
您需要计算查询的行数return。并且根据没有记录,您的条件将有效。目前它的 returning 一行类型数组。 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;
我认为您的 shorthand 可能有点不对劲,如果我理解您的意思,那么 table 中的同一用户会有多个会话,这意味着您无法使用->行()。
这样试试:
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');
}
我正在尝试使用 CI 执行通配符搜索查询。
我正在检查登录会话。如果用户登录到多个设备,则会显示一个弹出窗口。为了检查用户是否从任何其他设备登录,我执行通配符查询以检查 user_data 列中是否存在其用户 ID 和 return 行数。我面临的问题是,即使我是第一次登录,它也会转到 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');
}
您需要计算查询的行数return。并且根据没有记录,您的条件将有效。目前它的 returning 一行类型数组。 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;
我认为您的 shorthand 可能有点不对劲,如果我理解您的意思,那么 table 中的同一用户会有多个会话,这意味着您无法使用->行()。
这样试试:
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');
}