24

我正在使用节点 js 和模块 pg 连接到 postrgresql 我想搜索标签数据库但我无法使其工作,在变量标签中我保存了 url 的参数,但咨询没有t 返回任何结果。我该如何解决?

app.get("/tags", function(req, res){
        var tag = req.query.q;
        res.json(tag)
        var search = db.client.query("SELECT * FROM tags WHERE name LIKE '%$1%'", [tag], function(err, result){
                res.json(result);
            }
        );
    });
4

2 回答 2

42

我不太了解 node.js PostgreSQL 界面,但我想我可以看到问题所在。这是一个包含编号占位符的 SQL 字符串文字:

'%$1%'

$1字符串的内部不会被替换为值,tag因为字符串中的占位符根本不是占位符,它们只是恰好与占位符具有相同形式的子字符串。

两种常见的选择是:

  1. 在客户端代码中添加%通配符。
  2. %通配符连接到数据库内的字符串上。

第一个看起来像这样:

db.client.query("SELECT * FROM tags WHERE name LIKE $1", ['%' + tag + '%'], ...

第二个是这样的:

db.client.query("SELECT * FROM tags WHERE name LIKE '%' || $1 || '%'", [tag], ...

使用您喜欢的任何方法。

于 2013-10-19T23:03:17.037 回答
14

ES6 解决方案类似于:

client.query('select * from users where user_name Ilike $1', [`%${req.query.q}%`], (err1, result) => { ...
于 2018-01-09T14:53:37.170 回答