没有GROUP BY的聚合查询

时间:2017-04-18 20:44:33

标签: php mysql

此查询似乎在我的旧机器上运行良好。但是,在我使用MySQL 5.7.14和PHP 5.6.25的新机器上,它似乎抛出一个错误:

  

致命错误:带有消息的未捕获异常'PDOException'   'SQLSTATE [42000]:语法错误或访问冲突:1140聚合   没有GROUP BY的查询,SELECT列表的表达式#1包含   nonaggregated column'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();

为什么我现在收到此错误,如何轻松解决此问题。

4 个答案:

答案 0 :(得分:9)

change was made in version 5.7-ish默认情况下,拒绝使用函数(.header-tab{ height:100%; display:inline-block; padding:0 1vw 0 1vw; text-transform:uppercase; font-weight:450; color:white; } .header-tab:hover{ color:#ff704d; background:gray; box-sizing: border-box; border-bottom:3px solid #ff704d; } .center-vertical{ position: relative; top: 50%; transform: translateY(-50%); -webkit-transform: translateY(-50%); } .header{ height:5vw; background:black; } body{ margin:0; } sumavg等)汇总的查询max子句并且未将非聚合字段放在SELECT子句中。这种行为是所有其他RDBMS的重要组成部分,而且MySQL终于跳上了。

您有两种选择:

  1. 您可以将MySQL设置更改为默认为旧行为,以允许这样的不那么好的查询。可以找到信息here
  2. 您可以修复查询
  3. 选项2看起来像:

    GROUP BY

答案 1 :(得分:8)

有点晚了,但是我遇到了这个错误。

此命令对于遇到相同错误的其他人可能很有用

     mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

有关此问题的更多信息,请访问Table Plus JNevill 上面引用的其他链接。

希望它对其他人有帮助。

答案 2 :(得分:1)

将您的SQL模式更改为默认值..它将执行而不会出错 SQL模式定义查询的语法。如果您使用ONLY_FULLY_GROUPBY,则必须为所有聚合器函数编写包含group by的查询

答案 3 :(得分:0)

最简单的答案,在config / database.php中,请确保将mysql设置中的strict => true设置为strict => false。

这将允许进行不严格的查询,但会为正常格式正确的sql调用带来安全性(仍然不是100%安全),但是会允许使用其他sql调用,如果编写不当,这些调用可能是不安全的