这个查询似乎在我的旧机器上运行完美.但是,在我的MySQL 5.7.14和PHP 5.6.25的新机器上似乎抛出一个错误:
致命错误:带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突: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();
Run Code Online (Sandbox Code Playgroud)
为什么我现在收到此错误,我该怎么做才能轻松解决它.
JNe*_*ill 11
一个变化是在版本5.7制成,上下的地方现在,默认情况下,拒绝它你可以将使用功能(查询sum,avg,max中等等)SELECT条款,不能把非聚合领域中的GROUP BY条款.这种行为是所有其他RDBMS的重要组成部分,而且MySQL终于跳上了.
您有两种选择:
选项2看起来像:
SELECT id, password, COUNT(id) AS count FROM users WHERE email = :email GROUP BY id, password LIMIT 1
Run Code Online (Sandbox Code Playgroud)
小智 7
有点晚了,但我遇到了这个错误。
此命令对于遇到相同错误的其他人可能很有用
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Run Code Online (Sandbox Code Playgroud)
有关此问题的更多信息,请参见Table Plus和JNevill上面引用的其他链接。
希望它可以帮助别人。
小智 5
最简单的答案是,在 config/database.php 中确保将 mysql 设置的 strict => true 设置为 strict => false。
这将允许不太严格的查询,但会牺牲正常格式良好的 sql 调用的安全性(仍然不是 100% 安全),但将允许使用其他 sql 调用,如果编写不当,这些调用可能会不安全。