节点 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()
用于值。
我正在使用 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()
用于值。