首页 > 解决方案 > 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 服务器版本相对应的手册,以获取p_code在第 2 行的“WHERE =”附近使用的正确语法

选择 * 在哪里p_code=

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

行号:106

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

可能出了什么问题?任何人都可以帮忙吗?

标签: phpmysqlsqlcodeigniter

解决方案


根据原始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;
     }
}

推荐阅读