node mysql2用?传参查询报Incorrect arguments statement问题咨询
解答
你写的参数化查询写法是mysql2的标准正确用法,本身语法没有问题。你遇到的执行异常可以从以下几个方向排查:
- 优先检查
offset的返回值类型:SQL中LIMIT后接的参数必须是数值类型,若helper.getOffset返回的是字符串格式的数字,mysql2处理占位符时会自动为字符串参数添加单引号,最终生成的SQL会变成SELECT id, quote, author FROM quote LIMIT '0','10'这类非法语法,自然执行失败;你手动拼接参数时传入的是纯数字没有引号,就可以正常运行。你可以通过console.log(typeof offset)确认返回类型,如果是字符串直接转成数值即可,传参时改成[Number(offset), Number(config.listPerPage)]就行。 - 确认mysql2的导入版本:如果你初始化数据库连接时用的是
require('mysql2')而不是require('mysql2/promise'),默认的query方法是回调式的,不支持await调用,拿到的返回值也不是正常的查询结果,检查下数据库初始化部分的代码就能确认。 - 开启调试查看实际执行的SQL:创建数据库连接时添加
debug: true配置,就能直接打印出发送给MySQL服务端的完整SQL语句,能快速定位是不是参数转义环节出了问题。
内容的提问来源于stack exchange,提问作者chewie
相关产品推荐
相关产品推荐

