我使用node.js使用Query配置对象访问PostgreSQL表;
我想要构建的选择是'SELECT * FROM "Customers" WHERE "CustomersID" = 1'
,它可以与DB一起使用。
现在,这是我正在使用的查询对象;
const query = {
text: 'SELECT * FROM $1 WHERE "CustomersID" = $2',
values : ["Customers",1],
}
但我得到"#34; $ 1"或#34;#34;语法错误错误。 我尝试了不同的方法。或/和"但似乎不适合我。
在值数组中使用双引号将$ 1声明为字符串的正确方法是什么?
感谢 格斯
答案 0 :(得分:0)
Parameterized Queries
/ Prepared Statements
在服务器端格式化,不允许列或表名的变量,以反对SQL注入,这虽然是不必要的过度杀伤,但因此受到限制PostgreSQL服务器。
单独的转义列/表名实际上足以防止SQL注入,但必须在您身边完成,并且基本驱动程序node-postgres
在其查询格式中不支持它。
作为替代方案,pg-promise完全支持这一点:
db.query('SELECT * FROM $1:name WHERE "CustomersID" = $2', ['Customers', 1]);
// OR:
db.query('SELECT * FROM $1~ WHERE "CustomersID" = $2', ['Customers', 1]);
它使用自己的SQL Names表示法来正确转义列/表名。我们可以将:name
或~
附加到变量,以指示该变量表示SQL名称,而不是常规值。