查询运行得非常好,不会使用日期语句“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>
答案 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