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