【NodeJS】Error: Can't create more than max_prepared_stmt_count statements (current value: 16382)

問題

在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);
        });
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容