如何在node-postgres

时间:2017-09-05 19:52:39

标签: node.js node-postgres

我使用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声明为字符串的正确方法是什么?

感谢 格斯

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名称,而不是常规值。