MySQL WHERE子句失效:CodeIgniter项目无法筛选isactive=1的数据
问题分析与修复方案
嘿,我一眼就瞅出你代码里的问题啦!你在设置WHERE条件的时候犯了个语法错误,这正是查询失败的根源。
错误原因
你写的:
->where('isactive'==1)
这里的==是PHP的比较运算符,PHP会先计算'isactive' == 1这个表达式的结果——因为字符串'isactive'会被转换成数字0,0 == 1的结果是false,所以这行代码等价于->where(false),这显然不是你想要的过滤条件,自然查不到isactive=1的数据。
正确写法
CodeIgniter的Query Builder(包括你用的Datatables扩展)中,where()方法的正确用法是把字段名和值作为两个参数传递,或者传递键值对数组。你需要把这行改成:
->where('isactive', 1)
修正后的完整函数代码
public function displayinfo3() { $user_id = $this->session->userdata('user_id'); if($user_id) { $this->load->library('datatables'); $this->datatables ->select("user_type.user_type as user_type,user.user_name as user_name,user.first_name as first_name,user.middle_name as middle_name,user.last_name as last_name,user.user_id as Actions") ->from("user") ->where('isactive', 1) // 这里是修正后的代码 ->join("user_type","user_type.user_type_id=user.user_type_id","left") ->edit_column("Actions", "<center><div class='visible-md visible-lg hidden-sm hidden-xs'><div align='center'><div class='col-md-2'><form action='".base_url()."index.php/Registrationc/editpatient3' method='post'><input type='hidden' id='editp3' name='editp3' value='$1'><button title='EDIT PATIENT' class='tip btn btn-primary btn-xs' type='submit' value='Submit' ><i class='fa fa-edit'></i></button></form></div><div class='col-md-2'><a class=\"tip btn btn-danger btn-xs\" title='DELETE PATIENT' href='#' onclick=\"delete_patient('$1')\" ><i class=\"fa fa-trash-o\"></i></a></div></div></div></center>", "Actions"); echo $this->datatables->generate(); } else { redirect(base_url('Registrationc/extra1')); } }
额外检查建议
- 确认
user表中确实存在isactive字段,且字段类型是数值型(比如INT),避免字段名拼写错误或者类型不匹配 - 可以开启CodeIgniter的数据库调试模式,查看生成的SQL语句,确认
WHERE条件是否正确生成 - 检查
$user_id是否正确从session获取,确保代码进入了查询的逻辑分支
内容的提问来源于stack exchange,提问作者Nisha




