我有一个准备好的声明:
if ( $statement = $this->connection->prepare("SELECT question_type, count(*) AS `count` FROM (SELECT question.*, left(question_body, locate('between', question_body)-2) AS question_type FROM question) q WHERE (q.question_type = ? AND q.response_value_id = ?)") ) {
$statement->bind_param("si", $question_type, $response_value_id);
$statement->execute();
return $statement->get_result()->fetch_assoc();
} else {
var_dump($this->db->error);
}
这里是查询:
SELECT question_type, count(*) AS `count` FROM
(SELECT question.*, left(question_body, locate('between', question_body) - 2)
AS question_type FROM question)
q WHERE q.question_type = 'Did you return home' AND q.response_value_id = 4
问题:
由于某种原因,尽管我尝试在 phpMyAdmin 上运行查询并且它运行良好,但准备好的语句返回 false。
如果我在没有错误保护的情况下执行准备好的语句,我会得到错误:bind_param() on boolean
。
如果我在查询末尾添加:
GROUP BY q.question_type
然后一切正常。但是,这不是我想要的,因为它为计数返回 null 而不是 0,而且我也不明白没有 GROUP BY 它是如何工作的。
最佳答案
使用不带group by的聚合函数是不规范的,在最新版本的mysql(5.7)中是不允许的 检查你的版本是否正确,无论如何尝试对 group by 中未提及的列使用曾经聚合的函数 例如:
"SELECT question_type, count(*) AS `count`
FROM (
SELECT question.*, left(question_body, locate('between', question_body)-2) AS question_type
FROM question ) q
WHERE q.question_type = ? AND q.response_value_id = ?
GROUP BY question_type)"
或
"SELECT min(question_type), count(*) AS `count`
FROM (
SELECT question.*, left(question_body, locate('between', question_body)-2) AS question_type
FROM question ) q
WHERE (q.question_type = ? AND q.response_value_id = ?)"
关于php - 准备好的 PHP SQL 语句在没有 GROUP BY 子句的情况下返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45489457/