此查询似乎在我的旧机器上运行良好。但是,在我使用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();
为什么我现在收到此错误,如何轻松解决此问题。
答案 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;
}
,sum
,avg
等)汇总的查询max
子句并且未将非聚合字段放在SELECT
子句中。这种行为是所有其他RDBMS的重要组成部分,而且MySQL终于跳上了。
您有两种选择:
选项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调用,如果编写不当,这些调用可能是不安全的