MySQL在两个日期之间的查询作为时间戳

时间:2016-01-07 15:02:22

标签: php mysql

我一直在尝试从我的数据库中选择两个默认日期之间的项目:现在和60天前。但是,我尝试的所有查询都不起作用。

以下是我的尝试:

$Now = date("Y-m-d");
$Before = date("Y-m-d", strtotime("-60 days");

// This is try1
$sql = "SELECT * FROM myTable WHERE myTimestamp BETWEEN " . $Before . " AND " . $Now;  

// This is try2
$sql = "SELECT * FROM myTable WHERE myTimestamp >= " . $Before . " AND myTimestamp <= " . $Now; 

我不知道如何做到这一点。我已经查看了与此问题相同的其他问题,但没有一个解决方案有效。

请注意:这些查询不会出错。他们只是没有找回任何东西。我还使用get_defined_vars()将日期打印到页面上。这就是他们的表现:

[Now] => 2016-01-07
[Before] => 2015-11-08

1 个答案:

答案 0 :(得分:7)

&#34;请注意:这些查询不会出错。&#34; - 此" . $Before . " AND " . $Now;并且您正在使用2016-01-07和{ {1}} 字符串而非整数

2015-11-08

相同

另外,这些连字符被解释为MINUS,是一种数学运算。

I.e。:2016 减去 01 减去 07等,导致语法错误。

因此,那些应该是:

  • " . $Before . " AND myTimestamp <= " . $Now

  • WHERE myTimestamp BETWEEN '$Before' AND '$Now' ";

您没有得到任何内容,因为您并未检查这些语法错误。

关于字符串文字,请参阅http://dev.mysql.com/doc/en/string-literals.html

另请参阅When to use single quotes, double quotes, and backticks in MySQL

您也不会查询或获取任何内容,我们也不知道您使用哪个MySQL API进行连接,或者您是否成功连接到数据库。

咨询:

您可以使用WHERE myTimestamp >= '$Before' AND myTimestamp <= '$Now' ";mysqli_fetch_array(),具体取决于您要在此处执行的操作,这是mysqli_fetch_assoc()示例。

参考手册:

您应该利用MySQL的内置日期/时间功能。

并且不要将它们混合在一起,它不会那样工作。

咨询:Can I mix MySQL APIs in PHP?

根据您用于连接的MySQL API,以下是一些错误处理链接。

脚注:

看来你是MySQL新手,因此我建议你看看我给你的那些链接,在Stack上找到教程和Q&amp; A&#A。

您还应该考虑使用准备好的陈述:

以帮助对抗SQL injection