如何使用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]
答案 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)