Node.js操作MySQL批量插入数据报SQL语法错误
错误原因
你遇到的语法报错由两个问题共同导致:
- SQL语句语法不符合规范:标准INSERT语法要求表名后的列名列表必须用圆括号包裹,你写的SQL里表名
test后直接拼接列名,没有加括号,数据库解析到ID位置时无法识别语法结构,和报错提示的错误位置完全对应。 - query方法传参结构错误:MySQL驱动处理批量插入时,待插入的二维值数组直接作为预编译替换参数传入即可,你额外给值数组多套了一层数组,还把回调函数塞进了预编译参数的数组里,驱动会尝试把回调函数转成字符串拼接进SQL,进一步引发语法异常。
修复代码
先修正SQL语句,给列名列表补上圆括号,再调整query方法的传参结构,把回调函数作为独立的第三个参数传入,不要放到预编译参数数组中:
const sql = "INSERT INTO test (`ID`, `Name`, `Address`, `Phone`, `HomeAddress`) VALUES ?"; const values = [ [1, "fathe", "Dhaka", 1017310, "Madhabdi"], [1, "fathe", "Dhaka", 1017310, "Madhabdi"] ]; dbconnection.query(sql, [values], function (err: any, results: any) { if (err) { console.error("插入失败:", err); return; } console.log("插入成功,影响行数:", results.affectedRows); });
补充说明:如果你用的是Promise版本的MySQL驱动(比如mysql2/promise),不需要传回调,直接用await dbconnection.query(sql, [values])接收返回结果即可。
内容的提问来源于stack exchange,提问作者Fathe
相关产品推荐
相关产品推荐

