【问题标题】:Mysql query doesn't work anymore when escaping values转义值时,Mysql 查询不再起作用
【发布时间】:2019-06-13 08:01:33
【问题描述】:

我有查询要向我的节点服务器中的数据库添加列:

const query = 'ALTER TABLE ' + mysql.escape(tableData[i]) + ' ADD ' + mysql.escape(attributeData[0]) + ' FLOAT DEFAULT NULL;'

如果我在没有mysql.escape() 的情况下使用他们的查询,它会按预期添加列。但是,当使用转义函数来防止 sql 注入时,它不再起作用。这是为什么呢?

这是一个使用转义函数的示例查询,它不返回错误,但也不会将列添加到表中:

ALTER TABLE '1$0_Test_2018' ADD 'Eigenschaft_3' FLOAT DEFAULT NULL;

这个查询工作得很好,但是我想确保转义用户数据:

ALTER TABLE 1$0_Test_2018 ADD Eigenschaft_3 FLOAT DEFAULT NULL;

【问题讨论】:

  • 有哪些示例数据?
  • @Jacquesジャック OP 没有提到错误,他们只是说代码不起作用。
  • @JackBashford 你是对的,但我相信你的 25k 代表,你和我一样知道,这些细节很少的问题往往会遗漏重要信息,例如示例数据、错误.等
  • 第一个评论中请求了示例数据点,并且 OP 已经声明他们“没有错误”。
  • 啊,我在文档中找到了这个:If you can't trust an SQL identifier (database / table / column name) because it is provided by a user, you should escape it with mysql.escapeId(identifier) 所以在你的列/表名称的代码中将escape 更改为escapeId

标签: javascript mysql node.js mysqljs


【解决方案1】:

看起来您的问题可能是转义方法返回用引号而不是反引号括起来的值。

github docs 中,您似乎只需将escape 更改为escapeId

如果您不能信任 SQL 标识符(数据库/表/列名) 因为它是由用户提供的,所以您应该使用 mysql.escapeId(标识符)

【讨论】:

    猜你喜欢
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多