Mysql 转义值时查询不再有效

Mysql query doesn't work anymore when escaping values

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

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

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

这是一个带有转义函数的示例查询,它 returns 没有错误,但也没有将列添加到 table:

ALTER TABLE '1[=12=]_Test_2018' ADD 'Eigenschaft_3' FLOAT DEFAULT NULL;

此查询工作正常,但我想确保转义用户数据:

ALTER TABLE 1[=13=]_Test_2018 ADD Eigenschaft_3 FLOAT DEFAULT NULL;

看起来你的问题可能是转义方法 returns 用引号而不是反引号包裹的值。

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

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)