已解决
关于lumen严格模式接口mysql5.6和mysql5.7报错问题
来自网友在路上 166866提问 提问时间:2023-11-12 20:27:49阅读次数: 66
最佳答案 问答题库668位专家为你答疑解惑
sql语句
SELECT DISTINCT`someid`
FROM`sometable`
WHERE`id` IN ( 123, 456, 789 ) AND `status` = 1
ORDER BY`updatetime` DESC LIMIT 10 OFFSET 0
环境配置
生产环境使用的是 MySQL 5.6,而开发环境使用的是 MySQL 5.7。
生产环境的 SQL Mode 是空,开发环境的SQL Mode是 NO_ENGINE_SUBSTITUTION。
Lumen 配置:Lumen 的数据库配置文件中的 'strict' => env('DB_STRICT_MODE', true) 。
错误现象
- sql语句在生产环境(MySQL5.6.16-log)和开发环境(MySQL5.7.32-log)执行都正常;
- lumen接口在生产环境返回正常;在开发环境返回错误;
错误信息
General error: 3065 Expression #1 of ORDER BY clause is not in SELECT list, references column 'sometable.updatetime' which is not in SELECT list; this is incompatible with DISTINCT。
这个错误是因为在 SQL 查询中,你试图在 SELECT DISTINCT 语句后使用 ORDER BY 子句,而这个子句引用的列不在 SELECT 列表中。
问题分析
当你使用 DISTINCT 关键字时,SELECT 语句将返回唯一的行这意味着,你在 ORDER BY 子句中引用的任何列都必须包含在 SELECT 列表中,因为这些列是用来确定哪些行是“唯一”的。
解决方案
将 ORDER BY 子句中引用的列添加到 SELECT 列表中,或者删除 ORDER BY 子句。
总结
由于lumen指定了严格模式,导致接口会话的执行和navicat的窗口执行sql_mode是不同状态,所以测试环境的数据库能执行,但测试环境的接口不能执行。但为什么生产环境的数据库和生产环境的接口都能执行,还并不清楚。草草记录,留给需要的同学参考,欢迎各位同学指正。
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"关于lumen严格模式接口mysql5.6和mysql5.7报错问题":http://eshow365.cn/6-38371-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: Python中使用openpyxl的增改查删基础
- 下一篇: Python之函数进阶-函数执行原理