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

时间:2015-08-09 03:16:49

标签: node.js postgresql case-sensitive

如何使用nodejs + pg

进行区分大小写的查询

我想选择列内容=='a@gmail.com',
 但似乎变成了选择列=='a@gmail.com'?

p=1
q=1
spyArma=armaFit(~arma(p,q),data=spyRets)

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

2 个答案:

答案 0 :(得分:1)

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

在值周围使用单引号:

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

但理想情况下,您应该使用参数绑定,这样您就不必担心引用值了。当您使用字符串连接来构建SQL查询时,您经常会遇到SQL注入攻击。

答案 1 :(得分:1)

对于使用绑定参数,您必须以$1开头编号(然后$2等),然后将参数放在数组中:

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

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

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