node.js - 如何正确转义 node-postgres 查询中的单引号?
问题描述
我需要执行以下查询:
db.query("SELECT * FROM items WHERE name ILIKE '%$1%';", [ query ])
似乎 node-postgres 没有替换$1
参数,我不知道为什么。如果我将行更改为:
db.query(`SELECT * FROM items WHERE name ILIKE '%${query}%';`)
'
但是现在当查询包含单引号( )时我遇到了问题。
我是否应该使用正则表达式替换所有单引号(如query.replace(/'/g, "''")
)(我认为不建议这样做)?
否则,我怎样才能让 node-postgres 接受我的参数?我认为这与封装%
符号有关。我一直在这个问题上遇到同样的问题。
解决方案
您的占位符不会被替换,因为'%$1%'
它是一个 SQL 字符串文字,恰好看起来像是包含一个$1
占位符。您可以使用字符串操作在 JavaScript 中添加百分比:
db.query("SELECT * FROM items WHERE name ILIKE $1", [ `%${query}%` ])
// ---------------------------------------------------^^^^^^^^^^^^
或在 SQL 中使用 SQL 的字符串操作:
db.query("SELECT * FROM items WHERE name ILIKE '%' || $1 || '%'", [ query ])
// --------------------------------------------^^^^^^----^^^^^^
推荐阅读
- webpack - webpack 的“NormalModuleReplacementPlugin”中相对“newResource”的预期行为是什么?
- php - 无法使用php重定向到登录页面
- java - 如何在折叠工具栏布局时使对象保持不变?
- magento2 - 在 Magento 2 中禁用运输方式
- json - 使用 Swift 4 解码嵌套的 JSON
- javascript - gl.texImage2D 适用于 Image,但不适用于 ImageData
- javascript - 如何通过导入的 momentjs 为 angularjs-bootstrap-datetimepicker 设置语言环境
- python - Python - 为什么我的数字没有正确存储
- javascript - 在 JavaScript 中使用变量名而不是它的值,并使用它来更改“对象”键标识符
- python - MechanicalSoup形式的困难