【问题标题】:Error 1054 - Variable used as field in WHERE is taken as column [duplicate]错误 1054 - 在 WHERE 中用作字段的变量被视为列 [重复]
【发布时间】:2019-01-12 03:28:37
【问题描述】:

我正在尝试更新 mysql 数据库,但是当我执行查询时,我收到一个错误,其中 var id(在 WHERE 中使用)被用作列名。 我读错了吗?我必须解决什么问题才能让它工作?

Console Log

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)};
 });
}

【问题讨论】:

  • @David 这不是完全重复的,因为它没有说明从 Node 执行 MySQL 查询时正确的过程是什么。
  • @TimBiegeleisen:使用 Node 时的语法是否不同?反引号仍然被视为反引号,不是吗?
  • 无论如何,该链接不够具体,因为它暗示所有 OP 需要做的就是用单引号替换反引号,这基本上是错误的。
  • 我同意这里有很多问题。无效的语法是导致错误的原因。 OP 也受到 SQL 注入的影响,并且通常不正确地使用工具,并且控制台输出还意味着预期值一开始没有被发送到服务器。有很多东西要修复。修复语法至少应该让他进入下一步。
  • 对不起,我写错了日志,我把点赞改到了正确的

标签: javascript mysql node.js sql-update mysql-error-1054


【解决方案1】:

您的错误的直接原因是您试图使用反引号而不是单引号来转义文字值。您看到的错误消息暗示了这一点。但是,不只是用单引号替换那些反引号,您应该使用准备好的语句:

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)
    }
});

【讨论】:

    【解决方案2】:

    试试这个:

    var sql= "UPDATE stats SET worker = '"+worker+"', farmer = '"+farmer+"', soldier = '"+soldier+"', defender = '"+defender+"' WHERE id = "+id+" ";
    

    我从末尾的 id 列名称中删除了反引号(不必要的),并用单引号而不是反引号正确地包围了字符串。也不需要表名。

    【讨论】:

    • 它更新字段!谢谢!现在我必须与路线战斗,但我们不是为了这个 XD
    • 这个答案仍然不是最佳的,尽管它可能会解决直接的问题,因为更新查询可能对 SQL 注入开放,特别是如果字段来自 UI并且没有被消毒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    相关资源
    最近更新 更多