Node.js 找不到Postgres列错误(节点Postgres)

Node.js 找不到Postgres列错误(节点Postgres),node.js,postgresql,Node.js,Postgresql,我正在查询我的数据库以更新一个值,但是,我一直在nodejs中遇到这个错误。当我从命令行执行此操作时,查询工作正常,但从javascript代码中,它以同样的方式失败,列“value”不存在 client.query("UPDATE chore_list SET " + req.body.choseday.toLowerCase() + "=" + req.user.email + " WHERE chore ='" + req.params.chorename + "'") 在终端中,我

我正在查询我的数据库以更新一个值,但是,我一直在nodejs中遇到这个错误。当我从命令行执行此操作时,查询工作正常,但从javascript代码中,它以同样的方式失败,列“value”不存在

client.query("UPDATE chore_list SET " + req.body.choseday.toLowerCase() + "=" +  req.user.email  + " WHERE chore ='" + req.params.chorename + "'")
在终端中,我在最后一个参数周围加了单引号,它可以工作,但是,在上面的nodejs代码中,不管怎样,错误都会出现

错误:“测试”列不存在

请尝试以下操作(注意指定值周围的附加引号):

让userEmail=req.user.email.replace(/'/g,'');
client.query(
“更新杂务列表”
设置“+req.body.choseday.toLowerCase()+”='“+userEmail+””
其中chore='“+req.params.chorename+”“
);

编辑:我还添加了单引号替换(2个单引号),以防止(可能)不安全值中断SQL字符串。

您希望发送的实际语句是什么?你确定你的输入是你期望的吗?值得注意的是,您同时从
req.body
req.params
获取值,因此我建议记录这些值以检查它们。甚至考虑在语句> > Quices()/<代码>方法和日志记录之外构造语句字符串(它只是一个字符串),以便看到它也与您期望的语句构造相同,并且肯定没有相同的错误。我记录了这些值,它们确实存在。实际上,最后一个参数不是一列,而是我要查找的列中的一个值。这似乎是单引号的问题,因为我必须在终端中的值周围加单引号,但这里似乎无法识别这些值。然后交换引号。i、 e
“WHERE chore=”“+req.params.chorename+””
变为
”WHERE chore=“”+req.params.chorename+”
。还要注意的是,当问问题时,像“我实际上键入了不同的引号”这样的信息是非常重要的,人们可以马上意识到这是一个实际问题。当您实际告诉他们这一点时,SQL使用
(单引号)作为字符串。因此,更改引号会使情况变得更糟。我想你这里的问题是缺少引号。不要构建像那样的查询。手动生成查询时,您需要正确转义您在查询中输入的所有符号和值,否则您将在某些值上遇到错误,更糟糕的是,您会受到SQL注入攻击。在值周围加引号是不够的,您还需要正确转义这些变量内容中的特殊字符。是的这是正确的,为参数化查询提供更多参数。尽管我不知道它们在动态列名中的行为(但这里所需的值可能被假定为“save”,并且可以作为构建字符串的一部分;我没有直接使用它们的经验)。但为了确保正确引用,您只需要将Postgres中的所有单引号加倍,因为只有在字符串前面放置
E
时才会解释反斜杠。我将此添加到应答中感谢您的帮助,我在代码的JavaScript部分使用and IF ELSE语句找到了动态列名的解决方法。这样,我就可以使用node pg支持的参数化版本,并让它工作。