如何在mysql中选择日期范围?

时间:2016-08-31 08:36:16

标签: php mysql

我想在mysql中选择一个日期范围。

$dateFrom='2016-01-01';
$dateTo='2016-01-02';

不工作

query ="SELECT ".$name.",timestamp FROM people where age=".$age." AND timestamp>=".$dateFrom." AND timestamp<.$dateTo";

WORKING

query ="SELECT ".$name.",timestamp FROM people where age=".$age." AND timestamp>='2016-01-01' AND timestamp<'2016-01-02';

5 个答案:

答案 0 :(得分:5)

您需要将'单引号arround date变量。

query ="SELECT ".$name.",timestamp FROM people where age=".$age." AND timestamp>='".$dateFrom."' AND timestamp<'".$dateTo."';

确保您对SQL注入攻击持开放态度,最好使用Prepared语句来避免这种情况。

答案 1 :(得分:1)

在这些情况下,打印出您生成的SQL通常是个好主意。对于失败的代码,您将获得以下内容:

SELECT some_name,timestamp
FROM people where age=40
AND timestamp>=2016-01-01
AND timestamp<2016-01-02

查看时间戳?它们是不带引号的字符串。 SQL编译器可能会尝试在那里进行某种减法(2016 - 1 - 1)。

作为Alok Patel has pointed out,一种解决方案是更改代码,在您的日期周围加上引号字符。另一个解决方案是将您的日期视为数字,因为数字不需要引用,MySQL非常乐意使用20160101格式的日期作为数字。

但我必须重申其他人所说的话。将用户输入插入到SQL字符串中的是a very bad idea。请不要那样做!

答案 2 :(得分:0)

"SELECT ".$name.",timestamp 
FROM people WHEREage=".$age." 
AND timestamp BETWEEN'".$datefrom."' AND'".$dateTo."'

答案 3 :(得分:0)

检查区别。

您的代码:

query ="SELECT ".$name.",timestamp FROM people where age=".$age." AND timestamp>=".$dateFrom." AND timestamp<.$dateTo";

更新的代码:

query ="SELECT ".$name.",timestamp FROM people where age=".$age." AND timestamp>='".$dateFrom."' AND timestamp<'".$dateTo."';

答案 4 :(得分:0)

您的(不正常)代码存在 sintax错误

您可以使用sprintf函数 - http://php.net/manual/en/function.sprintf.php - 来连接字符串;

现场演示:http://ideone.com/8uWe6R

Example using sprintf to format SQL Query