我的 PHP 应用程序出现以下错误:
不正确的 SQL 查询(数据库)在没有 GROUP BY 的聚合查询中,SELECT 列表的表达式 #1 包含非聚合列 'db_20172201.cm_order.buyer';这与 sql_mode=only_full_group_by 不兼容
环顾了一会,并在尝试识别导致此错误的查询后,我决定应该更改 MySQL 服务器中的 SQL_MODE 选项。
我做了两件事来做到这一点:
执行了这个查询
SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
添加了以下内容,
my.cnf
其中是 MySQL 的配置文件[mysqld] sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
我认为这些就足够了,但错误永远不会从我的应用程序中消失。当我SQL_MODE
通过此查询检查环境中的值时
SELECT @@GLOBAL.sql_mode
它显示了上面插入的值。
我不知道还能去哪里看。我还尝试在执行查询之前从我的应用程序中设置 sql_mode 变量,但没有解决。
- - 更新
我刚刚在我的应用程序中打印了查询的结果,结果SELECT @@SESSION.SQL_MODE
是我设置的:
array(1) { [0]=> object(stdClass)#5 (1)
{
["@@SESSION.sql_mode"] => string(118) "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
}
}
但我仍然得到错误
PS。MySQL 版本是 5.7.18