【问题标题】:Pattern matching in rails ( "where column LIKE '%foo%") with Postgres使用 Postgres 在 rails ("where column LIKE '%foo%") 中进行模式匹配
【发布时间】:2013-07-09 18:07:41
【问题描述】:

我有一个包含姓名的 Person 模型,我想尽可能简单地搜索这些。

是否有类似People.like(:name => "%#{query}%") 的rails/ActiveRecord 方法,就像DataMapper 所拥有的那样?我在 ActiveRecord 文档中找不到类似的东西,但如果这根本不可能,我会感到震惊。

目前我正在使用Person.where "name LIKE '%#{query}%'",它工作得很好,但它是一个明显的 SQL 注入漏洞。

Rails 3.2

【问题讨论】:

  • postgres 不是用 ILIKE 代替 LIKE 吗?
  • "根据活动区域设置,可以使用关键字 ILIKE 代替 LIKE 使匹配不区分大小写。这不是 SQL 标准,而是 PostgreSQL 扩展。"

标签: ruby-on-rails postgresql activerecord


【解决方案1】:

使用参数化查询来避免 SQL 注入,如下所示:

Person.where('name LIKE ?', '%' + query + '%')

注意百分号必须是参数的一部分,而不是where子句,否则Rails会转义它,你会得到一个语法错误。 (至少在 postgres 上。)

ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR:  syntax error at or near "%"
LINE 1: ...name LIKE %'John...
                     ^

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2022-12-14
    相关资源
    最近更新 更多