MySQL Query返回所有日期而不是指定的年和月条款

时间:2015-01-26 15:32:48

标签: php mysql

下面的代码返回表中的所有日期,就好像月份和年份子句不存在一样。但是,如果我不将月份和年份存储为变量并且仅使用常量日期,那么它可以正常工作。这怎么可能?感谢。

$m="01";
$y="2015";

$get_my_dates = $db->query("SELECT * FROM dates WHERE YEAR('$y-01-01') = $y AND MONTH('2000-$m-01') = $m");
while($result = $get_my_dates->fetch_object()){
      echo $result->date."<br>";
}

2 个答案:

答案 0 :(得分:4)

看看你在做什么:

WHERE YEAR('$y-01-01') = $y ...

这将评估为:

WHERE YEAR('2015-01-01') = 2015 ...
WHERE 2015=2015 ...
WHERE TRUE ...

总是评估为真。

您需要检查表格中记录的日期,例如:

WHERE YEAR(datefield) = $y AND MONTH(datefield) = $m

答案 1 :(得分:2)

这是因为你的查询的WHERE子句没有意义。您的WHERE条件将始终满足,因为您根本不检查字段值,而是检查您提供的输入值。

您应该执行以下查询:

SELECT *
FROM dates
WHERE your_date_field >= '$y-$m-01 00:00:00'
AND your_date_field < '$y2-$m2-01 00:00:00'

此处$m2将设置为$m1 + 1$y2 = $y,除非$m等于12,在这种情况下,您需要增加$y2 = $y + 1和设置$m2 = 1

请注意,我用这种方式编写WHERE子句而不是更简单的

WHERE YEAR(your_date_field) = $y
AND MONTH(your_date_field) = $m

因为前者可以在字段上使用索引,而后者则不需要全表扫描。