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

Node.js中使用MySQL插入数据时遭遇ER_PARSE_ERROR语法错误求助

解决Node.js中MySQL插入数据的语法错误问题

嘿,我一眼就发现你代码里的问题所在了!你的SQL语句直接把values变量写进了字符串里,MySQL会把它当成SQL关键字来解析,而不是你生成的随机激活码,这就是导致语法错误的根本原因。而且这种直接拼接变量的写法还存在SQL注入的安全隐患,绝对不推荐这么用。

下面给你两种解决方案,优先推荐第一种:

方案一:使用参数化查询(最安全可靠)

这是MySQL官方推荐的写法,让驱动帮你处理参数的转义,既避免语法错误,又能防止SQL注入:

var mysql = require('mysql');
var activationKey = randomValueHex(8); // 变量名更清晰,避免和SQL关键字混淆
var sql = "INSERT INTO `activationkeys`(`activationKey`, `productId`) VALUES (?, '3')";
// 把参数放在数组里传给query方法,?会被自动替换成正确转义后的变量值
con.query(sql, [activationKey], function (err, result) {
  if (err) throw err;
  console.log("1 record inserted");
});

方案二:字符串拼接(不推荐,仅作参考)

如果你非要用字符串拼接的方式,必须给字符串类型的变量加上单引号,同时要注意转义特殊字符(但手动处理很容易出错):

var mysql = require('mysql');
var activationKey = randomValueHex(8);
// 用模板字符串拼接,给变量加上单引号
var sql = `INSERT INTO \`activationkeys\`(\`activationKey\`, \`productId\`) VALUES ('${activationKey}', '3')`;
con.query(sql, function (err, result) {
  if (err) throw err;
  console.log("1 record inserted");
});

总结

一定要优先选择参数化查询的方式,它不仅解决了你的语法错误,还从根源上杜绝了SQL注入的风险,让你的代码更安全健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:00:54