【发布时间】: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