Codeigniter3过滤查询结果:无法排除指定authstatus值的问题
问题排查与解决
核心问题:逻辑运算符使用错误
你代码里的if($re['authstatus']!='success' || $re['authstatus']!='0300')逻辑存在错误——无论authstatus是什么值,这个条件都会成立:
- 当
authstatus是success时,$re['authstatus']!='0300'为真,整个||条件结果为真 - 当
authstatus是0300时,$re['authstatus']!='success'为真,整个||条件结果为真 - 其他值时两个判断都为真,条件自然成立
这就导致本该过滤的记录完全没被排除。
解决方案1:修正PHP判断逻辑
把||换成&&,表示**同时不等于success和0300**才执行后续处理:
$res="select * from paymentform order by id desc limit 1000"; $query = $this->db->query($res); foreach ($query->result_array() as $re) { if($re['authstatus']!='success' && $re['authstatus']!='0300'){ // some processing } }
解决方案2:直接在SQL中过滤(更高效)
推荐在查询阶段就排除不需要的记录,减少数据库返回的数据量,提升性能:
// 用CodeIgniter查询构造器(更安全,避免SQL注入) $query = $this->db->where_not_in('authstatus', ['success', '0300']) ->order_by('id', 'desc') ->limit(1000) ->get('paymentform'); foreach ($query->result_array() as $re) { // some processing } // 或者直接编写SQL语句 $res="select * from paymentform where authstatus not in ('success', '0300') order by id desc limit 1000"; $query = $this->db->query($res); foreach ($query->result_array() as $re) { // some processing }
内容的提问来源于stack exchange,提问作者kite kit
相关产品推荐
相关产品推荐

