这个查询似乎在我的旧机器上运行良好。但是,在我使用 MySQL 5.7.14 和 PHP 5.6.25 的新机器上,它似乎抛出了一个错误:
致命错误:未捕获的异常 ‘PDOException’ 带有消息’SQLSTATE [42000]:语法错误或访问冲突:1140 在没有 GROUP BY 的聚合查询中,SELECT 列表的表达式 #1 包含非聚合列 ‘pixel_perfect.users.id’;这与 C:\wamp64\www 中的 sql_mode=only_full_group_by’ 不兼容
这是我的查询的样子:
$sql="SELECT id, password, COUNT(id) AS count FROM users WHERE email = :email LIMIT 1";
$stmt=$db->prepare($sql);
$stmt->bindValue(':email', $email);
$stmt->execute();
为什么我现在收到此错误,我该怎么做才能轻松解决它。
原文由 Rusty 发布,翻译遵循 CC BY-SA 4.0 许可协议
在版本 5.7.5 中进行了更改, 现在默认情况下,它会拒绝使用函数聚合的查询(
sum
,avg
,max
等)在SELECT
子句中,并且未能将非聚合字段放入GROUP BY
子句中。这种行为是所有其他 RDBMS 的重要组成部分,MySQL 终于加入了进来。你有两个选择:
选项 2 看起来像:
还需要注意的是,如果未聚合列被限制为单个值(例如 WHERE 子句中的过滤器),5.7.5 和更新版本允许从 GROUP BY 子句中排除非聚合列.有关此允许例外的示例,请参见上面的链接。