You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP用for循环遍历数组值查询数据库仅返回最后一条如何解决

问题排查与解决

第一步:确认数据库中是否存在对应数据

直接在你的数据库执行以下SQL,查看返回结果行数:

SELECT * FROM exams WHERE title IN ('1Z0-060','98-375','98-368','98-367');

如果返回结果只有1条(对应98-367),说明前三个编码在title字段不存在,可检查编码是否存在于slug等其他字段,或确认编码是否正确。

第二步:解决查询条件累积问题

你所使用的数据库查询构造器(大概率为CodeIgniter框架)默认会累积链式调用的条件,如果未主动重置,多次调用where()方法会生成WHERE title = '1Z0-060' AND title = '98-375' AND ...的无效查询,无法匹配任何数据。
修改模型的exam方法,每次查询前重置查询状态即可:

public function exam($q, $d) {
    // 重置之前的查询条件,避免累积
    $this->db->resetQuery();
    $query = $this->db->where($q, $d)
                      ->get('exams');
    return $query->row();
}

如果是CodeIgniter 3版本,get()执行后会自动重置查询条件,你可以打印执行的SQL确认条件是否正确:

public function exam($q, $d) {
    $query = $this->db->where($q, $d)
                      ->get('exams');
    // 日志输出SQL,排查条件是否符合预期
    log_message('debug', '执行的查询SQL:'.$this->db->last_query());
    return $query->row();
}

性能优化方案

循环调用查询会产生多次数据库请求,性能开销极大,建议使用whereIn单次查询所有匹配数据:

// 模型新增批量查询方法
public function getExamsByCode($field, $codes) {
    $this->db->resetQuery();
    $query = $this->db->whereIn($field, $codes)
                      ->get('exams');
    return $query->result();
}

// 业务层调用
$arrayTB = $this->Functions->getExamsByCode('title', $ecodesAr);
// 可选:按编码为key重组数组,方便后续调用
$arrayTB = array_column($arrayTB, null, 'title');

内容的提问来源于stack exchange,提问作者HAMMAD ALI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:57:02