mysql max_prepared_stmt_count_Error:Can't create more than max_prepared_stmt_count statements【解决方法】 ...

今天爱分享给大家带来Error:Can’t create more than max_prepared_stmt_count statements【解决方法】,希望能够帮助到大家。

问题

在Log中发现数据库插入出错,Error: Can’t create more than max_prepared_stmt_count statements (current value: 16382)

原因

主因: 在写插入语句时,没有做参数化的优化,如下

let sqlString = "INSERT INTO `TABLE` (`FIELD1`, `FIELD2`, `FIELD3`, `FIELD4`, `FIELD5`, `datetime`) VALUES (NULL, 19360.34, 18982.02, 18900, 19598, '2020-12-04T10:59:28.472Z')"

conn.execute(sqlString);

次因:NodeJS里mysql2模块中的用到了Prepare Statement提高性能,https://www.npmjs.com/package/mysql2#using-prepared-statements

解决方案

修改sql语句为

let sqlString = "INSERT INTO `TABLE` (`FIELD1`, `FIELD2`, `FIELD3`, `FIELD4`, `FIELD5`, `datetime`) VALUES (?, ?, ?, ?, ?, ?")"

const params = [open,close,low,high,`'${datetime}'`];

conn.execute(sqlString,params)

但是在更新语句进行参数化查询时,遇到了问题错误:MySQL: ERROR 2027 (HY000): Malformed packet。

唉。。。只能保持更新语句不变,每次执行完sql语句后,清除prepare的缓存了。

sqlString = updateSQLString;

conn.execute(sqlString)

.then(()=>{

conn.unprepare(sqlString);

resolve(sqlString);

})

.catch((err)=>{

reject(err);

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值