Error: Incorrect arguments to mysqld_stmt_execute

:::info
环境:mysql8.0.36
系统:unbuntu 20.4
:::
将本地的node项目部署到unbuntu服务器上后遇到了该问题,查阅资料得知是mysql2这个包在特定mysql版本下的bug。引用一段ai的话

这个错误通常出现在 MySQL 8.0.22 及其之后的版本中1。当查询中使用了 LIMIT ? 时,就会出现 “Incorrect arguments to mysqld_stmt_execute” 错误。目前,这个问题的解决方案是将参数的值映射为字符串

现在我们有两个方案:

  • 降低mysql的版本,对于不熟悉后端的前端同学(比如我),将会面临很多的风险。
  • 将参数从数字改为字符串。一个个改动会造成开发和部署行为不一致,影响开发体验,绝对是不能接受的。

所幸的是,对于替换字符串的方法,我们有更优雅的解决方案。

import mysql from 'mysql2/promise'
let db = mysql.createPool({
    host: '127.0.0.1',
    user: 'root',
    password: 'admin123',
    database: 'my_db_02',
})
export const db_execute = (sql, params) => {
	if (!params) {
		return db.execute(sql, params)
	} else {
		const new_params = params.map(item => {
			if (typeof item === 'number') {
				return item.toString()
			}
			return item
		})
		return db.execute(sql, new_params)
	}
}
export db

通过一个包装,就可以避免错误。这里没有银弹。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值