Codeigniter MySQL 根据会话中的用户 ID 过滤数据



>我的模型中有以下功能,可以根据会话中的用户ID选择记录。

public function getOfficer()
{
$usr = $this->session->userdata('id_user');
$userArray = $this->db->order_by('last_name','ASC')->where_in('tbl_officer.p_code', [8,10,24]);
$userArray1 = $this->db->order_by('last_name','ASC')->get_where('tbl_officer', array('status' => 1, 'usr'=>$this->session->userdata('id_user')));
if($usr == 4){
$this->db->where('p_code',$userArray );
}else{
$this->db->where('usr',$userArray1);
}
$q = $this->db->get('tbl_officer');
if ($q->num_rows() > 0) {
return $q->result();
}
return false;
}

如果用户 4 在会话中,则应按会话中p_code [8,10,24] 和任何其他用户过滤记录,则应根据 usr 过滤记录。 USR 列包括用户 ID,如 1、2、3、4 等。

但是该函数在错误后输出并且没有得到预期的结果。

错误号:42000/1064

您的 SQL 语法有误;请查看手册 对应于您的MariaDB服务器版本,以便使用正确的语法 在第 2 行的"WHEREp_code="附近

选择 * 其中p_code=

文件名: C:/xampp/htdocs/doahrm/application/models/Officer_model.php

行号:106

函数中$q = $this->db->get();行号 106。

可能出了什么问题?谁能帮忙?

根据原始 sql,from table_name丢失:

SELECT * WHERE `p_code` = ...

所以你正在失去你的桌子:

$q = $this->db->get('table_name');

我认为您的代码需要如下所示:

public function getOfficer()
{
$usr = $this->session->userdata('id_user');
if ($usr == 4) {
$query = $this->db->order_by('last_name','ASC')->where_in('tbl_officer.p_code', [8,10,24]);
} else {
$query = $this->db->order_by('last_name','ASC')
->where(array('status' => 1, 'usr'=>$usr));
}
$query = $query->get('tbl_officer');
if ($query->num_rows() > 0) {
return $query->result();
} else {
return false;
}
}

最新更新