Javascript 错误:ER_PARSE_错误:您的SQL语法有错误;

Javascript 错误:ER_PARSE_错误:您的SQL语法有错误;,javascript,mysql,node.js,npm,Javascript,Mysql,Node.js,Npm,我试图在nodejs中使用mysql插入值。我已经编写了以下代码,并通过npm安装了MySQL支持,但是由于这个问题,我无法插入到表中 我的代码 var mysql = require('mysql'); var values=randomValueHex(8); var sql = "INSERT INTO `activationkeys`(`activationKey`, `productId`) VALUES ( values ,'3')"; con.query(sql, funct

我试图在nodejs中使用mysql插入
值。我已经编写了以下代码,并通过npm安装了MySQL支持,但是由于这个问题,我无法插入到表中

我的代码

var mysql = require('mysql');

var values=randomValueHex(8);

var sql = "INSERT INTO `activationkeys`(`activationKey`, `productId`) 
VALUES ( values ,'3')";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("1 record inserted");
});
我在终端上的错误:

错误:ER_PARSE_错误:您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解在“3”附近使用的正确语法


如何解决此问题?

值目前与您在SQL查询中使用它的方式无关

什么是
?它是整数还是字符串

然而,您需要在字符串中连接变量值

var sql = "INSERT INTO `activationkeys`(`activationKey`, `productId`) VALUES (" + values + ",'3')";
而不是

var sql = "INSERT INTO `activationkeys`(`activationKey`, `productId`) 
VALUES ( values ,'3')";
请试试这个

 var sql = "INSERT INTO `activationkeys`(`activationKey`, `productId`) 
    VALUES ( " +  values + " ,'3')";

提供的值是字符串

为什么对列名使用后引号?我们不需要在列名中使用它。您只需在列值上使用
+
运算符创建动态sql查询,如下所示:

var sql = "INSERT INTO activationkeys (activationKey, productId) VALUES ( " + values + " ,'3')";

还有一个校正
变量必须这样给出
“+values+”
。这是定义变量的最正确方法。否则,您将这样给出“+values+”
,您可能会遇到这样的错误:错误:ER\U BAD\U FIELD\U错误:字段列表中的未知列“xxxxxx”
。我的代码是

var sql = "INSERT INTO `activationkeys`(`activationKey`, `productId`) VALUES ( '" +  values + "' , 3 )";

您的SQL查询无效。在错误处理之前执行console.log(this.sql),并在日志中查看正在执行的查询是什么
values
是MySQL关键字。您可能需要
sql=“…value”(“+VALUES+”,“3”)”
但最好使用准备好的语句。在当前状态下,您的代码易受SQL注入攻击。我总是使用
sequelize
在节点中处理数据库:-尝试一下:-)--;-)为什么要投否决票?我的答案与其他答案基本相同,但有更多细节。请开导我@axiac我指的是
values
JS变量,而不是括号前的值。我没有否决投票。我只是喜欢你的反问句,并把它们变成了一个有趣的评论(我希望如此)。