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);
        });

人已赞赏
前端

Duplicate keys detected: '2'. This may cause an update error.【解决方法】

2020-12-7 14:35:54

前端

Error: java.lang.ClassNotFoundException: Didn't find class "xxxx" frida注入hook 报错【解决方法】

2020-12-7 16:49:25

'); })();