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

MySQL查询问题:无法显示今日起7天内的datetime类型数据库条目

解决MySQL查询今日起未来7天内条目的问题

错误原因分析

  1. 第一个查询的问题:
    你写的reminder_date > CURDATE() + INTERVAL 7 DAY是筛选7天后及更晚的条目,逻辑完全反了,自然只显示7天后的内容。
  2. 第二个查询的问题:
    • 只用了reminder_date > ?,没有设置时间上限,所以会返回所有当前时间之后的条目(包括超过7天的);
    • 你用date("Y-m-d h:i:sa")生成的是12小时制带AM/PM的时间格式,和MySQL datetime字段的24小时制格式不兼容,可能导致比较逻辑失效,最终返回所有内容。

正确解决方案

根据你的需求(查询当前时间起未来7天内的条目),提供两种安全的写法:

写法1:直接用MySQL内置函数(无需PHP传参)

利用NOW()获取当前完整datetime,同时设置时间区间:

$stmt = $pdo->query("SELECT * FROM reminders_sc WHERE reminder_date >= NOW() AND reminder_date <= NOW() + INTERVAL 7 DAY ORDER BY reminder_date ASC");

如果需要筛选今日0点到7天后23:59:59的所有条目(不区分当前具体时间),可以用日期筛选:

$stmt = $pdo->query("SELECT * FROM reminders_sc WHERE DATE(reminder_date) BETWEEN CURDATE() AND CURDATE() + INTERVAL 7 DAY ORDER BY reminder_date ASC");

写法2:PHP传参绑定(更灵活,避免SQL注入)

注意用24小时制格式生成时间,匹配MySQL的datetime类型:

// 获取当前时间(24小时制)
$now = date("Y-m-d H:i:s");
// 计算7天后的时间
$sevenDaysLater = date("Y-m-d H:i:s", strtotime("+7 days"));

// 绑定参数执行查询
$stmt = $pdo->prepare('SELECT * FROM care_plan_review WHERE reminder_date >= ? AND reminder_date <= ? ORDER BY id DESC');
$stmt->execute([$now, $sevenDaysLater]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:10:48