【问题标题】:Error: ER_PARSE_ERROR: You have an error in your SQL syntax;错误:ER_PARSE_ERROR:您的 SQL 语法有错误;
【发布时间】:2018-08-29 08:49:39
【问题描述】:

我正在尝试在 nodejs 中使用 mysql 插入 values。我已经编写了以下代码并通过 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_ERROR:您的 SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,了解在 ''3')' 附近使用的正确语法

我该如何解决这个问题?

【问题讨论】:

  • 您的 SQL 查询无效。 dev.mysql.com/doc/refman/5.7/en/insert.html
  • 在错误处理之前执行 console.log(this.sql) 并在日志中查看正在执行的查询是什么
  • values 是 MySQL 关键字。您可能想要sql = "... VALUES(" + values + ", '3')",但您最好使用准备好的语句。在当前状态下,您的代码容易受到 SQL 注入的攻击。
  • 我总是使用sequelize 在节点中处理数据库:docs.sequelizejs.com - 试试看:)

标签: javascript mysql node.js npm


【解决方案1】:

为什么要为列名使用反引号?我们不需要在列名中使用它。您可以通过在列值上使用 + 运算符来简单地创建动态 sql 查询,如下所示:

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

【讨论】:

    【解决方案2】:

    代替

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

    请试试这个

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

    提供的值是一个字符串

    【讨论】:

      【解决方案3】:

      values 目前与您在 SQL 查询中使用它的方式不同。

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

      不过,您需要在字符串中连接 values 变量。

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

      【讨论】:

      • 为什么要投反对票?我的回答和其他的基本一样,只是有更多的细节。请启发我。 @axiac 我的意思是 values JS 变量,而不是括号前的 VALUES。
      • 我没有投反对票。我只是喜欢你的反问,并把它们变成了一个有趣的评论(我希望如此)。
      【解决方案4】:

      还有一个更正 values 变量必须像这样 '" + values + "' 。这是定义为变量的最正确方法。否则你给出这样的" + values + ",你可能会遇到这样的错误Error: ER_BAD_FIELD_ERROR: Unknown column 'xxxxxx' in 'field list'。我的代码是

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

      【讨论】:

        猜你喜欢
        • 2019-08-29
        • 2023-04-07
        • 2019-10-25
        • 1970-01-01
        • 2019-05-08
        • 2020-01-18
        • 1970-01-01
        • 2020-12-27
        • 1970-01-01
        相关资源
        最近更新 更多