如何在postgresql和node js中进行类似的搜索

Jos*_*osa 8 postgresql node.js sql-like

我正在使用节点js和模块pg连接到postrgresql我想搜索一个标签数据库,但我无法使它工作,在变量标签中我保存了网址的参数,但咨询没有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);
            }
        );
    });
Run Code Online (Sandbox Code Playgroud)

mu *_*ort 18

我不知道node.js PostgreSQL接口,但我认为我可以看到问题.这是一个包含编号占位符的SQL字符串文字:

'%$1%'
Run Code Online (Sandbox Code Playgroud)

$1该字符串内不会的值来代替tag,因为字符串内占位不占位可言,他们只是碰巧有相同的形式作为占位符子.

两种常见的选择是:

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

第一个看起来像这样:

db.client.query("SELECT * FROM tags WHERE name LIKE $1", ['%' + tag + '%'], ...
Run Code Online (Sandbox Code Playgroud)

第二个是这样的:

db.client.query("SELECT * FROM tags WHERE name LIKE '%' || $1 || '%'", [tag], ...
Run Code Online (Sandbox Code Playgroud)

使用您喜欢的任何方法.

  • @Heribert不是真的,在SQL字符串连接发生之前,``$ 1`将被正确转义为SQL,所以它不应该有任何区别. (3认同)

Nir*_* O. 6

ES6解决方案如下所示:

client.query('select * from users where user_name Ilike $1', [`%${req.query.q}%`], (err1, result) => { ...
Run Code Online (Sandbox Code Playgroud)