我使用的是mysql-node:https://github.com/mysqljs/mysql,但我对默认的清除、Mysql.Escape()与Mysql.EscapeId()以及?与??的使用有些困惑。医生说的?
默认消毒
当将对象传递给.escape()或.query()时,使用.escapeId()来避免对象键中的.escapeId注入。
我看到了Object这个词,这是否意味着我仍然应该逃避这样的查询呢?
UPDATE table SET updated_at = userInput WHERE name = userInput。
Mysql.Escape() vs Mysql.EscapeId()
这两种功能的区别是什么?医生说mysql.escape使用mysql.escapeId。我知道它们都能消毒输入,但有使用其中一种的情况吗?
?vs?
文档可以互换地使用?和??。他们的意思是一样的吗?
发布于 2018-03-01 00:19:14
我与mysqljs的维护者进行了交谈,并确认默认情况下这个包不会逃避查询。
当将对象传递给.escape()或.query()时,使用.escapeId()来避免对象键中的.escapeId注入。
如果使用以下方法之一,上述语句意味着查询将被转义。
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()用于值。
发布于 2018-02-27 23:52:38
文档描述了The ()和escapeId()所做的事情。当您需要转义值时,请使用转义()。当您需要转义标识符时使用escapeId() (例如表、数据库或列名)。
https://stackoverflow.com/questions/49015570
复制相似问题