如何在 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 名称,而不是常规值。
我正在使用 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 名称,而不是常规值。