【问题标题】:MYSQL Node.js parse error and throw err errorMYSQL Node.js 解析错误并抛出 err 错误
【发布时间】:2020-12-18 10:56:51
【问题描述】:

抛出错误; // 重新抛出非 MySQL 错误 ^

错误:ER_PARSE_ERROR:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ''a'、'b'、'c'' 附近使用正确的语法

(我在表单中输入了 a 作为名称,b 作为用户名,c 作为密码)

我不知道问题出在哪里。

db.js:

function createUser(name, username, password){
    var sql = "INSERT INTO users (name,username,password) VALUES ?";
    var values = [name, username, password];
    con.query(sql, [values], function (err, result) {
      if (err) throw err;
      console.log('inserted');
    });
  }

  module.exports = {createUser};

server.js 的相关部分:

app.post('/create', function(req,res) {
  db.createUser(req.body.name,req.body.username,req.body.password);
  res.status(200).send();
});

【问题讨论】:

  • 您将values 数组嵌套在另一个数组中。

标签: mysql sql node.js sql-insert


【解决方案1】:

您必须为每个变量添加一个占位符

function createUser(name, username, password){
    var sql = "INSERT INTO users (name,username,password) VALUES (?,?,?);";
    var values = [name, username, password];
    con.query(sql, values, function (err, result) {
      if (err) throw err;
      console.log('inserted');
    });
  }

  module.exports = {createUser};

【讨论】:

    【解决方案2】:

    我认为您只需要在值周围加上方括号:

    var sql = "INSERT INTO users (name,username,password) VALUES ?";
    var values = [[name, username, password]];
    con.query(sql, [values], function (err, result) { ... });
    

    这种机制主要用于插入多行。你也可以分开参数:

    var sql = "INSERT INTO users (name,username,password) VALUES (?, ?, ?)";
    var values = [name, username, password];
    con.query(sql, values, function (err, result) { ... });
    

    【讨论】:

    • 第一种方法有效,第二种方法给出了同样的错误。不过谢谢!
    • @jpj:第二个代码块也应该可以工作。您是否注意到我在第二个代码块的 query() 调用中删除了 values 周围的方括号?
    猜你喜欢
    • 2016-05-02
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    相关资源
    最近更新 更多