如何使用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双引号表示列名或表名。 这就是为什么错误消息说column "a@gmail.com" does not exist

围绕值使用单引号:

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

理想情况下,你应该使用参数绑定,所以你不必担心引用值。 当你使用string连接来build立SQL查询时,你经常会打开自己的SQL注入攻击。

对于使用绑定参数,你必须用$1开始编号(然后是$2等),然后把参数放在一个数组中:

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

始终传递数组中的参数。 最安全。

记住不要传递一个函数来查询你是否有一个非常大的表,除非你想在返回控制到de函数之前读取所有的表。 否则,您可以使用“开”事件或使用承诺方式(如https://www.npmjs.com/package/pg-promise-strict