【问题标题】:nodejs mysql query identifier '?' error, but concatenate query worknodejs mysql查询标识符'?错误,但连接查询工作
【发布时间】:2019-03-29 10:19:59
【问题描述】:

我正在尝试在我的网站上进行一般查询,我一直在我的项目期间使用参数处理数据并且没有任何问题,现在使用这些表,如果我按照以下方式进行操作,它对我不起作用:

在浏览器中:"localhost:3000/user/2/table/users/list "

router.get('/user/:userid/table/:Tablename/list', function(){
  var table = req.params.Tablename;

  db.get().query('SELECT * FROM  ? ',[table] ,function(err, rows, fields) {
    if (err) throw err;
    done(rows);
  });

});

这会产生错误:

ER_PARSE_ERROR:您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取在“用户”附近使用的正确语法 1


但如果我这样做,它会起作用:


db.get().query('SELECT * FROM  '+table ,function(err, rows, fields) {
        if (err) throw err;
        done(rows);
      });

我不明白为什么会这样,但我也不想这样,我觉得这样不合适,另外,这样有什么不方便吗?

p>

【问题讨论】:

    标签: mysql sql node.js function parameters


    【解决方案1】:

    一位朋友刚刚分享了我为什么,在同一个mysql指南中解释,我们必须使用双字符作为标记。

    使用?? 作为标识符,使用? 作为值

    如文档中所述,这将是一个示例

    查询:"SELECT * FROM ?? WHERE ?? = ?"

    我希望我的无知和我自己的回应能在未来帮助某人嘿嘿。

    【讨论】:

    • 警告:接受来自客户端req.params.Tablename的表名作为参数并以这种方式使用它是不安全的。您正在为安全漏洞做准备,允许读取意外的表。至少,您需要验证此表是否在此方法的可接受表名列表中。使用?? 比字符串连接更不安全(这是非常危险的,在任何情况下都不应该这样做),但它是一个规则,没有例外 nothing 来自可以相信请求参数不是恶意的。
    猜你喜欢
    • 1970-01-01
    • 2016-03-06
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    相关资源
    最近更新 更多