我正在尝试更新mysql数据库,但是当我执行查询时,我得到一个错误,其中将var id(在WHERE中使用)用作列名。 我读错了吗?我必须解决什么才能使其正常工作?
var message = '';
var id = req.session.user.id;
console.log(req.session.user.id);
var post = req.body;
var worker= post.worker;
var farmer= post.farmer;
var soldier= post.soldier;
var defender= post.defender;
var sql= "UPDATE stats SET worker = `"+worker+"`, farmer = `"+farmer+"`, soldier = `"+soldier+"`, defender = `"+defender+"` WHERE `stats`.`id` = `"+id+"` ";
db.query(sql, function(err, results){
if(results){
res.send('/home/dashboard.ejs')
};
if(err){console.log(err)};
});
}
答案 0 :(得分:2)
错误的直接原因是您试图使用反引号而不是单引号来转义文字值。您看到的错误消息暗示了这一点。但是,您不仅要使用单引号替换那些反引号,还应使用准备好的语句:
var sql = "UPDATE stats SET worker = ?, farmer = ?, soldier = ?, defender = ? WHERE id = ?";
db.query(sql, [worker, farmer, soldier, defender, id], function(err, results) {
if (results) {
res.send('/home/dashboard.ejs')
}
if (err) {
console.log(err)
}
});
答案 1 :(得分:2)
尝试一下:
var sql= "UPDATE stats SET worker = '"+worker+"', farmer = '"+farmer+"', soldier = '"+soldier+"', defender = '"+defender+"' WHERE id = "+id+" ";
我从末尾的id列名称中删除了反勾号(不必要),并用单引号而不是反勾号正确地包围了字符串。也不需要表名。