迁移主机后旧PHP版发票系统触发MariaDB SQL语法错误1064求助
问题根因
你遇到的1064 SQL语法错误是因为rows是MySQL/MariaDB的保留关键字,旧版本数据库对保留字用作字段别名的校验规则宽松不会报错,新主机的数据库版本更高,校验规则收紧后就会直接抛出语法错误。
修复方案
方案一(最优,永久兼容)
修改COUNT查询的别名为非保留字,同时同步修改取值代码:
- 找到生成
$count变量的逻辑,将原来的SELECT COUNT(*) as rows修改为SELECT COUNT(*) as total_rows - 修改interface_base.php第295行的代码:
// 原代码 $this->count_all = $this->db->query($count.$from.$join.$where.$order)->row()->rows; // 修改后 $this->count_all = $this->db->query($count.$from.$join.$where.$order)->row()->total_rows;
方案二(临时兼容,无需修改取值逻辑)
保留别名不变,给保留字加反引号转义:找到生成$count变量的逻辑,将SELECT COUNT(*) as rows修改为SELECT COUNT(*) as \rows``即可。
额外优化建议
COUNT查询仅统计总条数,拼接$order排序逻辑完全不影响计数结果,还会增加不必要的查询开销,你可以在生成COUNT查询时去掉$order部分的拼接,进一步提升查询效率。
内容的提问来源于stack exchange,提问作者Владислав Влаев
相关产品推荐
相关产品推荐

