MySQL查询问题:无法显示今日起7天内的datetime类型数据库条目
解决MySQL查询今日起未来7天内条目的问题
错误原因分析
- 第一个查询的问题:
你写的reminder_date > CURDATE() + INTERVAL 7 DAY是筛选7天后及更晚的条目,逻辑完全反了,自然只显示7天后的内容。 - 第二个查询的问题:
- 只用了
reminder_date > ?,没有设置时间上限,所以会返回所有当前时间之后的条目(包括超过7天的); - 你用
date("Y-m-d h:i:sa")生成的是12小时制带AM/PM的时间格式,和MySQLdatetime字段的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
相关产品推荐
相关产品推荐

