【问题标题】:How to properly escape a regular expression in Active Record where clause如何在 Active Record where 子句中正确转义正则表达式
【发布时间】:2015-07-26 17:45:37
【问题描述】:

我正在使用Active Record v4.2.1 使用正则表达式查询mySQL 数据库。我想创建以下 SQL:

SELECT `users`.* FROM `users` WHERE (email REGEXP '[@\.]gmail\.com')

但是,我似乎找不到使用 Active Record 创建 SQL 的正确方法。


User.where("email REGEXP ?", "[@.]gmail.com").to_sql

产量

"SELECT `users`.* FROM `users` WHERE (email REGEXP '[@.]gmail.com')"

User.where("email REGEXP ?", "[@\.]gmail\.com").to_sql

产量

"SELECT `users`.* FROM `users` WHERE (email REGEXP '[@.]gmail.com')"

User.where("email REGEXP ?", "[@\\.]gmail\\.com").to_sql

产量

"SELECT `users`.* FROM `users` WHERE (email REGEXP '[@\\\\.]gmail\\\\.com')"

如何让 Active Record 正确转义 SQL?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 activerecord rails-activerecord


    【解决方案1】:

    使用to_sql 时,控制台中的转义看起来是错误的,您的最后一个示例实际上将其发送到 MySQL:

    SELECT `users`.* FROM `users` WHERE (email REGEXP '[@\\.]gmail\\.com')
    

    您可以通过在控制台中运行实际查询并检查日志文件来确认这一点。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 2011-08-05
    • 2013-01-18
    • 1970-01-01
    • 2016-11-17
    • 2016-10-26
    • 1970-01-01
    相关资源
    最近更新 更多