我在查询功能(https://github.com/mysqljs/mysql#escaping-query-values)中使用了以下查询:
database.query("UPDATE Project SET Content = 'Hello ?' WHERE Id = ?", [id], function(err, rows, fields) {
if (err) {
console.log(err);
res.json({ status: 'FAIL QUERY' });
} else {
res.json({ status: 'SUCCESS' });
}
});
我有一个错误,因为它正在替换问号"'您好?'"和" WHERE Id =?"他只有一个属性:[id]。 怎么避免这个?
答案 0 :(得分:3)
您有多种选择:
database.query("UPDATE Project SET Content = ? WHERE Id = ?", [ 'Hello ?', id], function(err, rows, fields) { ... })
或者:
database.query("UPDATE Project SET Content = 'Hello ?' WHERE Id =" + mysql.escape(id), function(err, rows, fields) { ... });
答案 1 :(得分:0)
预备语句将按顺序替换传递数组中元素的?
的每个实例。如果要将其保留为占位符,或者在数组中包含2个元素,则需要使用不同的占位符字符,第一个是?
替换Hello
之后的内容(承担)请注意,它也会在该元素周围放置单引号),第二个引用Id = ?
答案 2 :(得分:0)
我会将此报告为该项目的错误。当这些字符出现时,它们不应该替换?
个字符:
如果Node.js项目正在替换?
而不考虑上下文,那么这是一个不可接受的错误。
我会停止使用该软件包,直到修复错误。
答案 3 :(得分:0)
感谢您的所有答案!我学到了很多。 使用(mysql.escape(id))的robertklep答案对我有用。
然而,我发现了另一种与您共享的方式,即为查询添加多个参数:
您可以创建一个名为queryJSON的JSON并向其添加键值。例如:queryJSON = {Content: 'Hello ?', Address: '742 Evergreen Terrace'}
。然后:
database.query("UPDATE Offer SET ? WHERE Id = ?", [queryJSON, id], function(err, rows, fields) {
这对我的请求添加一个或多个参数的放置请求非常有用。