首页 > 解决方案 > 如何正确转义 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 接受我的参数?我认为这与封装%符号有关。我一直在这个问题上遇到同样的问题。

标签: node.jspostgresqlnode-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 ])
// --------------------------------------------^^^^^^----^^^^^^

推荐阅读