You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS使用mysql2向MySQL批量插入数据时报SQL语法错误如何解决?

问题原因及修复方案

你代码存在两个核心错误,直接导致了SQL语法报错:

1. 入参解析逻辑错误

你接收的JSON数组中每个元素都是包含idseller_portfolio_item、image_url两个字段的对象,但你当前的遍历逻辑完全错误:

// 错误写法
for(let i in body)
    result.push([i, body [i]]);

这段代码中i是数组的索引(0、1这类数字),body[i]是完整的数据对象,最终生成的result数组完全不符合SQL插入的字段要求,属于数据构造错误。
正确写法应该从每个对象中提取对应字段的值:

// 正确写法
const result = [];
for (const item of body) {
    result.push([item.idseller_portfolio_item, item.image_url]);
}

2. MySQL2 API使用错误

mysql2的execute方法是预处理语句执行逻辑,不支持VALUES ?这种批量插入的占位符写法,导致预处理阶段无法识别这个占位符,直接将?带入最终SQL执行,触发语法报错。
你需要将con.execute替换为con.query即可:

const sql = "INSERT INTO seller_portfolio_item_images (idseller_portfolio_item, image_url) VALUES ?";
// 将execute改为query
con.query(sql, [result], function (err, result) {
    // 原有异常、返回逻辑保持不变
})

附加小问题

你原有参数校验逻辑存在逻辑错误:

// 错误写法,null和undefined不可能同时满足,校验永远不生效
if (event.body == null && event.body == undefined)

正确写法应该用逻辑或:

if (event.body == null || event.body == undefined)
// 或者更简单的写法,因为null == undefined为true
if (event.body == null)

内容的提问来源于stack exchange,提问作者PeakGen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:39:02