【问题标题】:Escape single quote in Postgres query inside node js app在节点 js 应用程序内的 Postgres 查询中转义单引号
【发布时间】:2017-06-04 05:12:12
【问题描述】:

这是我的节点 js 代码中的一行:

var qry = 'INSERT INTO "sma"."RMD"("UserId","Favourite")  VALUES (' + req.body.user + ',' + JSON.stringify(req.body.favourite) + ')'

我想在JSON.stringify(req.body.favourite) 之前插入单引号。但我无法逃脱单引号。我无法调试问题,因为我正在将代码上传到 predix 云服务器 知道如何实现吗?

【问题讨论】:

  • 为了爱……使用参数化查询!!!!!!!!!!!!!!!永远不要像在问题中那样在组合查询的地方编写代码。您很容易受到SQL-INJECTION-ATTACS 的攻击。
  • 你不应该这样做!让数据库库作为查询格式的一部分正确转义值。
  • 问题是合法的,在某些情况下可能需要它,例如获取时间间隔'1 DAY'

标签: javascript node.js postgresql predix


【解决方案1】:

为什么不使用准备好的语句?

var qry = 'INSERT INTO "sma"."RMD"("UserId","Favourite")  VALUES ($1, $2)';
client.query(qry, [ req.body.user, JSON.stringify(req.body.favourite])'

【讨论】:

    【解决方案2】:

    您还可以使用模板文字来构建您的查询

    使用反引号字符Check main answer here的模板文字

    alert(`Use "double" and 'single' quotes in the same string`);
    alert(`The escape the \` back-tick character in a string`);
    

    模板文字为变量插值、多行字符串等提供了简洁的语法。

    【讨论】:

    • 这应该是所提问题的公认答案。尽管 OP 通过字符串格式化查询做错了,但在某些情况下您需要在查询中转义引号,例如使用时间间隔 '1 Day'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 2018-08-01
    相关资源
    最近更新 更多