如何使用 nodejs + pg 进行区分大小写的查询

How to make case sensitive query with nodejs + pg

如何使用nodejs + pg进行区分大小写的查询

我要select栏目内容=='a@gmail.com',
但它似乎变成了 select 列 == 'a@gmail.com'?

[error: column "a@gmail.com" does not exist]

代码

var userEmail = 'a@gmail.com';

var query = 'SELECT EXISTS(SELECT * FROM "User" WHERE "Email" = "'+userEmail+'")';
dbClient.query(query, function(error, result) {
  ...

这与大小写无关。问题是您将电子邮件地址放在双引号中,并且在(大多数种类)SQL 双引号中表示列名或 table 名称。这就是错误消息显示 column "a@gmail.com" does not exist.

的原因

在值周围使用单引号:

var userEmail = 'a@gmail.com';
var query = 'SELECT EXISTS(SELECT * FROM "User" WHERE "Email" = \'' + userEmail + '\')';

不过,理想情况下,您应该只使用参数绑定,这样您根本不必担心引用值。当您使用字符串连接构建 SQL 查询时,您经常会面临 SQL 注入攻击。

要使用绑定参数,您必须从 </code> 开始编号(然后是 <code> 等等),然后将参数放入数组中:

var query = 'SELECT EXISTS(SELECT * FROM "User" WHERE "Email" = )';
dbClient.query(query, [userEmail], function(error, result) {

始终以数组形式传递参数。是最安全的。

记住,如果你有一个非常大的 table,请不要传递一个函数来查询,除非你想在 returns 控件失效之前读取所有 table。否则你可以使用 "on" 事件或使用承诺方式(如 https://www.npmjs.com/package/pg-promise-strict