EC-CUBEで検索のロジックを修正するようなカスタマイズを行うと、次のようなエラーが発生することがあります。
SQLSTATE[42000]: Syntax error or access violation: 1140 In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column ‘hogehoge’; this is incompatible with sql_mode=only_full_group_by
このシステムエラーはMySQL5.7以降でsql_modeのデフォルト値が変更されたために見かけることが多くなりました。
Group Byを用いたSQLで、Group byに指定していないカラムに対して集約系関数を使用せずにSELECTすると発生します。
例えば次のようなSQLです。idがGroyp Byにないのでエラーになります。
SELECT id, product_id, MAX(price02) FROM dtb_product_class GROUP BY product_id
EC-CUBE4.1以前のバージョンは価格順の商品一覧並び替えにこの問題があり、Doctrineだとなかなか解消が厄介なので、sql_modeにonly_full_group_byを設定しないよう変更してしまうのも1つの手です。
現在のSQLMODEの確認方法
show variables like ‘sql_mode’; というSQLを実行することで確認可能です。
SQL_MODEの変更方法
一時的な変更方法
次のSQLで変更が可能です。
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'
永続的な変更方法
my.cnfに次のように指定した上でMySQLを再起動します。
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。