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)
我有向节点服务器中的数据库添加列的查询:
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)