【问题标题】:Node Mysql Escaping - Mysql.Escape() / Mysql.EscapeId()节点 Mysql 转义 - Mysql.Escape() / Mysql.EscapeId()
【发布时间】:2018-08-07 12:10:15
【问题描述】:

我正在使用 mysql-node:https://github.com/mysqljs/mysql,但我对默认清理有点困惑,Mysql.Escape()Mysql.EscapeId() 以及 ??? 的使用。文档说?

默认清理

当您将对象传递给 .escape() 或 .query() 时,将使用 .escapeId() 以避免对象键中的 SQL 注入。

我看到了“对象”一词,这是否意味着我仍然应该逃避这样的查询?

UPDATE table SET updated_at = userInput WHERE name = userInput

Mysql.Escape() 与 Mysql.EscapeId()
这两个函数有什么区别。文档说 mysql.escape 使用 mysql.escapeId。我知道它们都对输入进行了清理,但是否存在您使用其中一个或另一个的情况?

?与??
文档交替使用???。他们的意思是一样的吗?

【问题讨论】:

    标签: node.js node-mysql mysqljs


    【解决方案1】:

    我和mysqljs的维护人员谈过,确认这个包默认不会转义查询。

    当您将对象传递给 .escape() 或 .query() 时,将使用 .escapeId() 以避免对象键中的 SQL 注入。

    上面的语句意味着如果您使用以下方法之一,查询将被转义。

    let args = { name: 'myname' otherVals: 'blah blah'}; 
    mysql.query('Insert INTO table SET ?',args);
    
    let name = 'test'; 
    mysql.query('INSERT INTO table SET name = ?', [name]);
    

    对于问题的第二部分:??escapeId 用于标识符,?escape() 用于值。

    【讨论】:

    • “插入表集?”这是一个很棒的提示,它应该在 node-mysql 示例中。
    【解决方案2】:

    文档描述了 escape() 和 escapeId() 的作用。当您需要转义值时使用 escape()。当您需要转义标识符(例如,表、数据库或列名)时,请使用 escapeId()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 2021-10-24
      • 2012-12-20
      • 2021-01-29
      • 2019-08-08
      • 1970-01-01
      相关资源
      最近更新 更多