节点 Mysql 转义 - Mysql.Escape() / Mysql.EscapeId()

Node Mysql Escaping - Mysql.Escape() / Mysql.EscapeId()

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

默认清理

When you pass an Object to .escape() or .query(), .escapeId() is used to avoid SQL injection in object keys.

我看到了对象这个词,这是否意味着我仍然应该转义这样的查询?

UPDATE table SET updated_at = userInput WHERE name = userInput

Mysql.Escape() 对比 Mysql.EscapeId()
这两个函数有什么区别。文档说 mysql.escape 使用 mysql.escapeId。我知道他们都对输入进行了清理,但是在某些情况下您会使用其中一个吗?

?对比 ??
文档交替使用 ???。他们的意思是一样的吗?

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

我和 mysqljs 的维护者谈过,确认这个包默认不转义查询。

When you pass an Object to .escape() or .query(), .escapeId() is used to avoid SQL injection in object keys.

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

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]);

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