
本文介绍在 CodeIgniter 框架中,如何高效查询数据库中满足多个离散值条件的记录,重点讲解 where_in() 方法的正确用法,替代传统单值 where(),适用于如“状态为 1(到岗)或 3(迟到)”等多值匹配场景。
本文介绍在 codeigniter 框架中,如何高效查询数据库中满足多个离散值条件的记录,重点讲解 `where_in()` 方法的正确用法,替代传统单值 `where()`,适用于如“状态为 1(到岗)或 3(迟到)”等多值匹配场景。
在 CodeIgniter 的 Query Builder(查询构造器)中,当需要对某一字段匹配多个可能的值(例如 status IN (1, 3)),直接将数组传入 where() 是无效的——它只会序列化或触发错误。此时应使用专用方法 where_in(),它会自动生成符合 SQL 标准的 IN 子句,并安全处理数组参数(包括转义与类型适配)。
以下是对原方法的优化实现:
public function get_tertiarylevel_present() {
$this->db->where('timestamp', strtotime(date('Y-m-d')));
$this->db->where('section_id', 11);
$this->db->where_in('status', [1, 3]); // ✅ 正确:生成 status IN (1, 3)
$query = $this->db->get('daily_attendances');
return $query->num_rows();
}? 说明:
where_in('status', [1, 3])等价于原生 SQL 中的WHERE status IN (1, 3),CodeIgniter 会自动对数组元素进行安全转义,避免 SQL 注入风险。
⚠️ 注意事项:
- 不要尝试用
where('status', [1, 3])—— 这会导致意外行为(如字符串化为Array或报错); - 若数组为空(
[]),where_in()将生成WHERE status IN (),多数数据库会返回空结果集,建议提前校验:$statuses = [1, 3]; if (!empty($statuses)) { $this->db->where_in('status', $statuses); } - 如需组合更复杂条件(如
status IN (1,3) OR status IS NULL),可配合or_where_in()或使用group_start()/group_end()构建嵌套逻辑。
✅ 总结:where_in() 是 CodeIgniter 中处理“多值精确匹配”的标准、安全且语义清晰的方式。掌握其用法,不仅能准确实现业务逻辑(如统计“到岗+迟到”总人数),还能提升代码可读性与可维护性。


















