我想在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';
答案 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 - 来连接字符串;