mysql 靠近 '?' 的 nodejs 语法错误

Syntax error in nodejs with mysql near to '?'

我尝试着手研究数据库 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

那里学到了这段代码

您不能传递 {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 "); 
});

我不确定 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是由服务器或者数据库中的自增列生成的。

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