2

我正在使用 mysql-node: https://github.com/mysqljs/mysql但我对默认清理、Mysql.Escape()vs和vsMysql.EscapeId()的使用有点困惑。文档说????

默认清理

当您将对象传递给 .escape() 或 .query() 时,.escapeId() 用于避免对象键中的 SQL 注入。

我看到了“对象”一词,这是否意味着我仍然应该逃避这样的查询?

UPDATE table SET updated_at = userInput WHERE name = userInput.

Mysql.Escape() vs Mysql.EscapeId()
这两个函数有什么区别。文档说 mysql.escape 使用 mysql.escapeId。我知道它们都对输入进行了清理,但是否存在您使用其中一个或另一个的情况?

? 对??
文档使用???互换。他们的意思是一样的吗?

4

2 回答 2

4

该文档描述了 escape() 和 escapeId() 的作用。当您需要转义值时使用 escape()。当您需要转义标识符(例如,表、数据库或列名)时,请使用 escapeId()。

于 2018-02-27T23:52:38.427 回答
2

我与 mysqljs 的维护者交谈,并确认此包默认情况下不会转义查询。

当您将对象传递给 .escape() 或 .query() 时,.escapeId() 用于避免对象键中的 SQL 注入。

上面的语句意味着如果您使用以下方法之一,查询将被转义。

let args = { name: 'myname' otherVals: 'blah blah'}; 
mysql.query('Insert INTO table SET ?',args);

let name = 'test'; 
mysql.query('INSERT INTO table SET name = ?', [name]);

对于问题的第二部分:??andescapeId用于标识符,?andescape()用于值。

于 2018-03-01T00:19:14.917 回答