首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在TypeORM的select部分绑定参数?

有没有办法在TypeORM的select部分绑定参数?
EN

Stack Overflow用户
提问于 2019-08-19 17:04:47
回答 2查看 4K关注 0票数 1

我正在尝试实现与PostgreSQL的TypeScript和TypeOrm编写的项目中的pg_trgm模块搜索。SQL对我有效的方法如下所示:

代码语言:javascript
复制
SELECT t, similarity(t, 'word') AS sml
  FROM test_trgm
  WHERE t % 'word'
  ORDER BY sml DESC, t;

但是当我开始将它集成到我的构建器中时,我意识到我不能保护select语句不受SQL注入的影响,因为TypeOrm不提供在任何select方法(如SelectQueryBuilder::addSelectSelectQueryBuilder::select)中绑定参数。

我的易受攻击方法的示例:

代码语言:javascript
复制
...
applySearch(builder: SelectQueryBuilder<any>, needle: string) {
    if (needle) {
      builder.addSelect(`similarity(title, ${needle})`);
      builder.andWhere('title % :needle', { needle });
    }
  }
...

也许有人知道在我的技术堆栈中实现这种搜索的更好方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-21 19:16:16

这个问题的决定是下一步在whereselect语句中使用相同的绑定键。

代码语言:javascript
复制
applySearch(builder: SelectQueryBuilder<any>, needle: string) {
    if (needle) {
      builder.addSelect(`similarity(title, :needle)`);
      builder.andWhere('title % :needle', { needle });
    }
  }
票数 2
EN

Stack Overflow用户

发布于 2020-10-15 21:37:07

我需要一个类似的解决方案,但是你的解决方案不适合我。如果您想要更改select中的参数,则应该查看setParameter,这是addWhere的第二个参数在内部执行的操作。

https://github.com/typeorm/typeorm/blob/master/docs/select-query-builder.md#using-parameters-to-escape-data

所以在你的情况下,你可以

代码语言:javascript
复制
applySearch(builder: SelectQueryBuilder<any>, needle: string) {
    if (needle) {
      builder.addSelect(`similarity(title, :title)`);
      builder.andWhere('title % :needle', { needle });
      builder.setParameter('title', needle);
    }
  }
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57553534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档