如何在 node-postgres 的查询配置对象中声明带双引号的字符串

How to declare a string with double quotes in Query config object in node-postgres

我正在使用 node.js 通过查询配置对象访问 PostgreSQL table;

我要构建的 select 是 'SELECT * FROM "Customers" WHERE "CustomersID" = 1',它与数据库配合得很好。

现在,这是我正在使用的查询对象;

const query = {
   text: 'SELECT * FROM  WHERE "CustomersID" = ',
   values : ["Customers",1],
}

但我收到 "syntax error at or near "$1" 错误。 我用“or/and”尝试了不同的方法,但似乎对我不起作用。

在值数组中将 $1 声明为带双引号的字符串的正确方法是什么?

谢谢 古斯

Parameterized Queries / Prepared Statements 在服务器端格式化,不允许列或 table 名称的变量,以对抗 SQL 注入,这已经足够了不必要的矫枉过正,因此是 PostgreSQL 服务器强加的限制。

单独转义 column/table 名称实际上足以防止 SQL 注入,但必须在您这边完成,基本驱动程序 node-postgres 在其内部不支持它查询格式。

作为替代方案,pg-promise 完全支持:

db.query('SELECT * FROM :name WHERE "CustomersID" = ', ['Customers', 1]);
// OR:
db.query('SELECT * FROM ~ WHERE "CustomersID" = ', ['Customers', 1]);

它使用自己的 SQL Names 符号来正确转义 column/table 名称。我们可以将 :name~ 附加到变量以指示该变量表示 SQL 名称,而不是常规值。