php - 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();
在函数中。
可能出了什么问题?任何人都可以帮忙吗?
解决方案
根据原始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;
}
}
推荐阅读
- python - 为什么在这个简单的 python sqlite3 更新查询代码上出现“数据库已锁定”错误?
- javascript - 通过 JSON 键的 Node Js 转换 JSON
- android - 单击时如何标记抽屉导航中的子菜单?
- pointers - 你能用汇编语言减去两个指针吗?
- amazon-web-services - AWS Amplify Auth + React Native - 电话号码的属性值不能为空
- excel - Excel 日期的 SQL Developer 导出编码
- swift - 在 UITextView 中阅读更多和更少阅读:Ilya Puchka readMoreTextView not working
- ruby-on-rails - Docker-compose 无法翻译主机名“postgres”
- reactjs - React setState 未能捕获被拒绝的 Promise
- python - curl 不检索 url。错误 (56) OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054