【问题标题】:Syntax error in nodejs with mysql near to '?'mysql 靠近 \'?\' 的 nodejs 语法错误
【发布时间】:2022-12-19 16:43:47
【问题描述】:

我试着接触数据库 mysql 和 nodejs。在学习过程中,我遇到了脚本语法错误,我不知道如何修复语法。

var express = require('express');
var router = express.Router();
var db=require('../database');
router.get('/form', function(req, res, next) { 
res.render('users'); 
});
router.post('/create', function(req, res, next) {

// store all the user input data
const userDetails=req.body;

// insert user data into users table
var sql = 'INSERT INTO users SET ?';
db.query(sql, userDetails,function (err, data) { 
  if (err) throw err;
     console.log("User dat is inserted successfully "); 
});
res.redirect('/users/form');  // redirect to user form page after inserting the data
}); 
module.exports = router;

这是错误:

code: 'ER_PARSE_ERROR',
errno: 1064,
sqlMessage: "You have an error in your SQL syntax; check the manual that corresponds 
to your MySQL server version for the right syntax to use near '?' at line 1",
sqlState: '42000',
index: 0,
sql: 'INSERT INTO users SET ?'

以供参考: 我从link 学习这段代码

【问题讨论】:

  • 感谢@Amadan 的回复,所以就我而言,用户表中有 5 列。我应该如何编写语法?该列由 id、全名、电子邮件地址、城市和国家/地区组成。

标签: javascript mysql node.js


【解决方案1】:

我不确定 db.query 函数的具体实现是什么,但你可能想要这样的东西(我从你的其他评论中得到了数据库模式):

let sql = 'INSERT INTO users SET id=?, fullName=?, emailAddress=?, city=?, country=?';
db.query(sql, userDetails, function (err, data) { 
  if (err) {
     throw err;
  }
  console.log("User dat is inserted successfully "); 
});

如果这不起作用,请尝试将 SQL 变量设置为此:

let sql = 'INSERT INTO users (id, fullName, emailAddress, city, country) VALUES (?, ?, ?, ?, ?)';

我假设 userDetails 变量引用具有以下类型的对象:{ id, fullName, emailAddress, city, country }

在使用准备好的语句时,SQL 要求每次插入时的每一列都有一个问号。 db.query 函数可能会尝试将对象直接作为字符串插入,这可能会导致问题,因为您的模式有 5 列。 stringified 对象的 JSON 语法也可能导致 SQL 解析器出错。

如果这不起作用,我想看看您的架构。您的函数似乎将 req.body 对象直接发送到数据库,这意味着用户将 id 直接发送到数据库。这是相当不常见的,通常行的 id 是由服务器或数据库中的自动增量列生成的。

我希望这对您有用,如果您有任何问题或疑虑,请随时回复。

【讨论】:

    【解决方案2】:

    您不能传递 {field1 : 1, field2 : 2, field3 : 3} 之类的数据。 传递这个'INSERT INTO users SET field1 = ?, field2 = ?';

    const userDetails=[
                        1, // this value is field1
                        2, // this value is field2
                      ];
    
    // insert user data into users table
    var sql = 'INSERT INTO users SET field1 = ?, field2 = ?';
    db.query(sql, userDetails,function (err, data) { 
      if (err) throw err;
         console.log("User dat is inserted successfully "); 
    });
    

    【讨论】:

      【解决方案3】:

      我们假设内容是对象

      userDetails = {
        name: "Rum Haidar F.",
        dob: "1990-01-01",
        address: "Foo Bar Street"
      }

      尝试添加 [ 值 ]

      // insert
      var sql = 'INSERT INTO users SET ?';
      db.query(sql, [userDetails],function (err, data) { 
        if (err) throw err;
           console.log("User dat is inserted successfully "); 
      });

      更新数据 [ 值,您的条件 ]

      // update
      var sql = 'UPDATE users SET ? WHERE user_id = ? AND status = ?';
      db.query(sql, [userDetails, 69, 'active'],function (err, data) { 
        if (err) throw err;
           console.log("User dat is inserted successfully "); 
      });

      【讨论】:

        猜你喜欢
        • 2011-01-11
        • 2016-06-18
        • 2020-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-17
        相关资源
        最近更新 更多