如何使用CodeIgniter查询构造器编写带AND/OR逻辑的WHERE条件
实现方案
CodeIgniter 查询构造器内置了分组条件方法,可以完美实现带括号的复杂WHERE逻辑,无需手动拼接SQL字符串:
// 对应原SQL的 `b`.`User_Type` = 6 AND `a`.`payment_status` = 2 $this->db->where('b.User_Type', 6); $this->db->where('a.payment_status', 2); // 对应原SQL的 OR (`a`.`payment_status` = 1 AND `a`.`approvedStatus` = 2) $this->db->or_group_start(); $this->db->where('a.payment_status', 1); $this->db->where('a.approvedStatus', 2); $this->db->group_end();
说明
group_start()/or_group_start()和group_end()是专门用来处理括号分组的方法,两者中间定义的所有查询条件会被自动包裹在一对括号内,同时自动处理逻辑连接符- 所有参数会被自动转义,避免了直接拼接SQL带来的SQL注入风险
- 生成的WHERE语句和你提供的原生拼接SQL逻辑完全一致,执行结果无差异
如果需要更明确的控制条件优先级,也可以把前两个条件也包入独立分组,逻辑完全等价:
$this->db->group_start(); $this->db->where('b.User_Type', 6); $this->db->where('a.payment_status', 2); $this->db->group_end(); $this->db->or_group_start(); $this->db->where('a.payment_status', 1); $this->db->where('a.approvedStatus', 2); $this->db->group_end();
内容的提问来源于stack exchange,提问作者Er. Anuj Saini
相关产品推荐
相关产品推荐

