我一直在尝试从我的数据库中选择两个默认日期之间的项目:现在和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
答案 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