Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
日期过滤在mysql、php中不起作用_Php_Mysql_Sql_Date - Fatal编程技术网

日期过滤在mysql、php中不起作用

日期过滤在mysql、php中不起作用,php,mysql,sql,date,Php,Mysql,Sql,Date,我有一个网站,我想显示的文章已经张贴了过去24小时。我以为这很容易,但我不明白我做错了什么 让我们从头开始,在mysql中,我有以下表格: id | editor | article | date ----------------------------- 128| 8 | .... | 2013-03-20 01:01:26 129| 8 | .... | 2013-03-20 01:03:24 日期字段是时间戳 现在在php中,我有以下代码: $date =

我有一个网站,我想显示的文章已经张贴了过去24小时。我以为这很容易,但我不明白我做错了什么

让我们从头开始,在mysql中,我有以下表格:

id | editor | article | date
-----------------------------
128|   8    |  ....   | 2013-03-20 01:01:26
129|   8    |  ....   | 2013-03-20 01:03:24
日期字段是时间戳

现在在php中,我有以下代码:

$date = date('Y-m-d H:i:s', strtotime('-1 day')); //24 hours ago
$articles = mysql_query("SELECT * FROM articles WHERE editor=8 AND 'date' > '".$date."' ORDER BY id DESC");
如果我现在运行此代码,因为我的本地时间戳是2013-03-21 15:20:07,比文章时间戳多24小时,我仍然会得到文章,尽管我不应该这样做,因为2013-03-20 01:01:26文章128时间戳<2013-03-20 15:20:07现在-1天。我还通过phpmyadmin运行了代码,结果相同

我看不出我做错了什么,我试着用我的数据库中其他有日期字段的表进行实验,但仍然无法让它工作


非常感谢。

它不起作用的原因是您正在用单引号包装列名。其效果是将列名更改为字符串,因此您将日期与字符串文字日期进行比较。删除它周围的单引号,它就会工作

$articles = mysql_query("SELECT * FROM articles WHERE editor=8 AND date > '".$date."' ORDER BY id DESC");
请记住,单引号和双引号用于字符串文字,而反引号用于标识符

作为旁注,如果变量的值来自外部,则查询易受攻击。请看下面的文章,了解如何预防它。通过使用PreparedStatements,可以避免在值周围使用单引号


最好的解决方案是将数据库中的时间存储转换为秒,然后使用 质疑

示例:日期'H:i:s'

转换为秒=>变量=3600*日期'H'+60*日期'i'+日期's'


现在用几秒钟做任何事情

我知道问题已经得到了回答和解决,但我只想说下一件事:

你为什么不让mysql来做计算呢,它比较短而且容易阅读:

SELECT * FROM articles WHERE editor=8 AND 'date' > DATE_ADD(NOW(), INTERVAL -1 DAY) ORDER BY id DESC ;

我将时间存储为秒,从时间开始给我更多的自由和灵活性来进行查询。您执行的最后一个查询是什么?很遗憾,删除单引号不起作用。另外,添加反勾号而不是单引号也不起作用。奇怪的是,从phpmyadmin运行查询仍然不起作用。例如,此查询:从tipster_id=8且日期>2013-03-20 14:15:05的优惠券中选择*会出现此错误1064-您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“14:15:05 LIMIT 0,30”附近要使用的正确语法。此查询:从tipster_id=8且日期>2013-03-20 14:15:05的优惠券中选择*会出现此错误:“WHERE子句”中的未知列“2013-03-20 14:15:05”,因为您没有用单引号括起值而不是列名。选择从…起哪里日期='2013-03-20 14:15:05'我的错。我误解了你的第一篇帖子,我以为你指的是日期值。现在它起作用了。谢谢!!!也谢谢你的额外建议,这些值不是来自外部,但我会考虑的。对不起,我真的不明白。您建议我将数据库行的日期字段转换为秒,然后找到我想要的时间内的行?如果我理解你的意思,我首先需要从数据库中获取最近20篇文章,然后找出其中哪些是在过去24小时内创建的。对的