添加“WHERE date BETWEEN”语句后,查询返回布尔值

时间:2015-05-16 14:57:33

标签: php mysql mysqli

查询运行得非常好,不会使用日期语句“BETWEEN ** AND **”来限制它。当我添加日期限制时,它返回一个布尔值而不是通过循环对结果进行分组。

这是我的代码

$result = $mysqli->query("SELECT blood_type WHERE date BETWEEN '". 
$startingdate."' AND '". $endingdate ."',
count(*) AS donor_count FROM donors GROUP BY blood_type");

这就是循环:

while ($row = $result->fetch_assoc()) {
    $resultArray[] = $row;  
}

抛出此错误:

PHP Fatal error:  Call to a member function fetch_assoc() on boolean

知道它为什么不返回数组应该是什么?

修改

我收到以下错误:

  

您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以便在“WHERE date BETWEEN”2015-04-20'AND'2015-05-18'附近使用正确的语法,在第1行计算(*)AS donor_count FROM d' / p>

2 个答案:

答案 0 :(得分:2)

当您想要调试某些内容时,应该打印出SQL。您的查询是这样的:

SELECT blood_type
WHERE date BETWEEN '". $startingdate."' AND '". $endingdate ."',
count(*) AS donor_count
FROM donors
GROUP BY blood_type;

虽然是由SQL子句构成的,但它是乱码的。我想你想要:

SELECT blood_type, count(*) as donor_count
FROM donors
WHERE date BETWEEN '". $startingdate."' AND '". $endingdate ."'
GROUP BY blood_type;

SQL语句中子句的顺序是固定的。如果按错误的顺序排列,则会出错。您的代码应检查此类错误。

此外,日期应该真正参数化,而不是嵌入到查询字符串中。

答案 1 :(得分:1)

不确定你想在这里做什么,但如果你想在按血型分组的特定时间段内计算捐赠者,你的查询应该是这样的:

$result = $mysqli->query("SELECT blood_type, count(*) as donor_count WHERE date BETWEEN '". $startingdate."' AND '". $endingdate ."' GROUP BY blood_type");

翻译成这样的东西:

select blood_type, count(*) as donor_count WHERE date between '2015-05-10' and '2015-05-16' group by blood_type