我的MySQL数据库中有事件都有日期。当我执行SQL查询以获取将来的所有事件时,我收到错误...尽管事件的日期是将来的。当我更改我的SQL请求以选择过去的日期时,我会从未来获得那些...
下面的SQL语句之前有用,但由于某种原因它停止工作......
我使用此SQL请求:
$sql = "SELECT * FROM calendar WHERE date >= CURDATE() order by `date`";
我得到一个空数组......结果 但是,如果我将查询更改为此,我将获取数据库中的所有事件:
$sql = "SELECT * FROM calendar WHERE date <= CURDATE() order by `date`";
这是我的数据库数据。在我看来,所有数据都在未来......
date
表的格式是默认日期类型:
当我向我的服务器询问时间echo date("Y-m-d");
时,我得到了今天的日期...
那我在哪里犯错?
答案 0 :(得分:2)
您可能正在检查错误的日期字段。您是否有创建日期和预定日期?
我可能会因为我现在感冒的药而疯狂,但你的日期表不可能是你的日历项的日期,id提交的只是一个int(2),这看起来有点小
答案 1 :(得分:2)
也许更简单?我注意到表中的列名是date
,它也是函数date()的名称,它返回datetime值的日期部分。如果是这样的话
$sql = "SELECT * FROM calendar c WHERE c.`date` <= CURDATE() order by `date`";
会做到这一点。即使不是mysql本身,你使用的gui应用程序(对我来说似乎是phpmyadmin)可能会感到困惑。
(顺便说一下,你忘记了order by子句中date
的结束标记)
答案 2 :(得分:1)
获得一个空集意味着找不到匹配的东西。我会看看你的日期格式。我唯一想到的是它正在比较一个不匹配的类型,所以只返回一个空集。
答案 3 :(得分:1)
答案 4 :(得分:0)
在进行查询之前,请运行以下命令:
SET time_zone = '-2:00'; // or whatever your time zone is.
答案 5 :(得分:0)
不要问我怎么或为什么,但我已经截断了我的表并重新插入了一些数据,我的查询似乎工作正常:
$sql = "SELECT * FROM `calendar` WHERE `date` >= CURDATE() order by `date`";
所以,尽管事实上问题似乎是通过截断我的桌子来解决的,但我想知道问题的答案......任何人都可以提供给我吗?