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

MySQL datetime条件查询PHP问题:指定时间数据无法匹配

看起来你是想精准匹配tasks表中time字段等于2018-05-03 11:02:00的记录,但当前的SQL条件完全偏离了需求,还存在SQL注入风险,我来帮你一步步解决:

为什么原代码没有返回结果?

你原查询里的条件AND time > DATE_SUB(CURDATE(), INTERVAL 1 HOUR),意思是筛选time大于当前日期减去1小时的记录。比如现在如果是2024年的某个时间,这个条件只会匹配最近1小时内的数据,和你要找的2018年的记录完全不匹配,自然查不到结果。

正确的查询方式(优先推荐安全写法)

首先绝对不要直接把变量(比如$datas[$i])拼进SQL语句,这会引发严重的SQL注入漏洞。从$this->db判断你应该在用类似CodeIgniter的框架,我推荐用框架自带的安全写法:

方法1:使用查询构造器(最简洁安全)

// 定义要匹配的目标时间
$target_time = '2018-05-03 11:02:00';
$staff_id = $datas[$i];

// 构建查询,框架自动处理参数绑定,避免注入
$query = $this->db->select_sum('count', 'total')
                  ->select_sum('status', 'is_completed')
                  ->from('tasks')
                  ->where('staff_id', $staff_id)
                  ->where('time', $target_time)
                  ->get();

// 处理查询结果
if ($query->num_rows() > 0) {
    $result = $query->row();
    echo "总计数:" . $result->total . "<br>";
    echo "已完成数:" . $result->is_completed . "<br>";
} else {
    echo "没有找到匹配的记录";
}

方法2:原生SQL+参数绑定

如果更习惯写原生SQL,用占位符?绑定参数同样安全:

$target_time = '2018-05-03 11:02:00';
$staff_id = $datas[$i];

$query = $this->db->query(
    "SELECT sum(count) As total, sum(status) As is_completed 
     FROM `tasks` 
     WHERE `staff_id` = ? AND `time` = ?",
    array($staff_id, $target_time)
);

// 结果处理逻辑同上

额外注意事项

  • 确保tasks表的time字段类型是DATETIME(或TIMESTAMP),且存储格式是YYYY-MM-DD HH:MM:SS,和你传入的时间格式一致。
  • 如果需要匹配该时间的范围(比如整小时内的数据),可以把条件改成time BETWEEN '2018-05-03 11:00:00' AND '2018-05-03 11:59:59',但根据你的描述,精准匹配用=就足够了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:35:48