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

Node.js中MySQL插入数据报错ER_WRONG_VALUE_COUNT_ON_ROW求助

问题原因分析与解决方案

这个错误ER_WRONG_VALUE_COUNT_ON_ROW(错误码1136)的核心原因是INSERT语句中指定的列数量和提供的值数量不匹配,我们来拆解你的代码问题:

问题根源:SQL占位符与参数不匹配

你的代码里的SQL语句是:

INSERT INTO plans (topic, notes, resources) VALUES (?)

同时传入的参数是[req.body.topic, req.body.note, req.body.resource]——这是三个独立的值,但SQL里只放了一个占位符?。

MySQL会理解为:你要插入一行数据,这行需要对应3个列,但你只提供了1个值(单个?只能匹配一个参数),自然就会抛出"列数与值数不匹配"的错误。

两种修复方案

方案1:调整SQL占位符数量,与参数一一对应

把SQL语句里的(?)改成(?,?,?),让三个占位符正好匹配三个参数:

app.post("/msg", (req, res) => { 
  console.log(req.body) 
  connection.query(
    'INSERT INTO plans (topic, notes, resources) VALUES (?,?,?)', 
    [req.body.topic, req.body.note, req.body.resource],
    (error, results) => { 
      if (error) return res.json({ error: error });
      // 建议添加成功响应,避免客户端一直等待
      res.json({ success: true, data: results });
    }
  ); 
});

方案2:将参数包装为二维数组,匹配单个占位符

如果想保留单个?,可以把三个值放到一个子数组里,这样?会匹配这个子数组,代表一行的三个值:

app.post("/msg", (req, res) => { 
  console.log(req.body) 
  connection.query(
    'INSERT INTO plans (topic, notes, resources) VALUES (?)', 
    [[req.body.topic, req.body.note, req.body.resource]], // 外层数组包裹子数组
    (error, results) => { 
      if (error) return res.json({ error: error });
      res.json({ success: true, data: results });
    }
  ); 
});

额外提示

  • 注意字段名一致性:你的表列是notes,但代码里用的是req.body.note(少了一个s),这可能导致插入空值,建议检查前端传参的字段名是否和表列名完全一致。
  • 必须添加成功响应:原代码只有错误分支的响应,成功时客户端会一直处于等待状态,记得在执行成功后返回明确的响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:37:05