我的目的是从我登录页面开始,我希望我的网站显示数据库中有多少更新数据。我的代码就像这样
$current = $_SESSION['date'];
$query2 = "SELECT * FROM gmaptracker1 WHERE datetime >= '$current'";
当我回显$current
时,它显示27/09/14 : 06:53:24
,因此$current
是正确的,但是,当我请求数据库的数量date>='$current'
时,我得到零虽然我已经将具有日期时间28/09/14 : 06:53:24
和29/09/14 : 06:53:24
的数据插入数据库。
有人可以帮我摆脱这个吗?
答案 0 :(得分:2)
很少,
您的代码似乎容易受到SQL注入攻击。仅仅因为您从会话中检索日期的内容,它并不意味着它是安全的。
另外,为什么需要它在会话变量中呢?如果您总是想要检索大于NOW()
的日期,您可以这样写下您的查询:
SELECT * FROM gmaptracker1 WHERE datetime >= NOW()
引起我注意的部分是你存储日期的格式。
你说当你回复$_SESSION['date']
时,价值是: 27/09/14:06:53:24
现在,这看起来根本不像日期格式。您的列实际上是datetime
还是timestamp
列?
如果它是VARCHAR
或除datetime
或timestamp
以外的任何其他类型,那么MySQL无法知道您是否已知道试图检索将来发生的日期。
如果您已经存储了数据,那么它就不会像更改数据类型一样容易,因为您已有数据,并且数据格式错误。 MySQL存储日期时间信息的格式如下:
YYYY-MM-DD HH:MM:SS
根据您留下的评论,您不需要时间> NOW()
,您需要登录的时间。现在,为什么您将该时间存储在变量中是有道理的。
问题在于您存储的格式。
由于您使用的是PHP,因此您必须以这种方式存储时间:
$time = new DateTime();
$_SESSION['date'] = $time->format("Y-m-d H:i:s");