我有查询要向我的节点服务器中的数据库添加列:
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;
答案 0 :(得分:1)
您的问题似乎可能是转义方法返回用引号而不是反引号引起来的值。
在github docs中,您似乎只需要将escape
更改为escapeId
。
如果您不信任SQL标识符(数据库/表/列名) 因为它是由用户提供的,所以您应该使用 mysql.escapeId(identifier)