You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Rails中使用ilike时如何对%、&等特殊字符进行转义

Rails ilike模糊查询特殊字符转义方案

报错原因

  • 原生ILIKE查询中%、_属于SQL内置通配符,未转义直接传入用户输入的特殊字符时,会破坏原有SQL结构导致语法错误
  • 直接拼接用户输入到查询条件中还存在SQL注入风险,输入&等特殊字符触发报错也是同理

解决方法

使用Rails内置的sanitize_sql_like方法转义查询关键词,该方法会自动转义所有LIKE语法相关的特殊字符,适配PostgreSQL、MySQL等主流数据库。

基础写法

# 先转义用户输入的书名关键词
sanitized_book_name = ActiveRecord::Base.sanitize_sql_like(options[:book_name])
# 执行模糊查询,参数绑定的写法本身也会过滤非法SQL字符
books = Book.where("books.name ILIKE ?", "%#{sanitized_book_name}%")

进阶无原生SQL写法(推荐)

使用Arel表构造查询,避免手写SQL片段,可维护性和安全性更高:

book_arel = Book.arel_table
sanitized_book_name = ActiveRecord::Base.sanitize_sql_like(options[:book_name])
# matches方法第三个参数设为true,对应大小写不敏感的ILIKE查询
books = Book.where(book_arel[:name].matches("%#{sanitized_book_name}%", nil, true))

补充说明

  • 如果需要自定义转义符,可以给sanitize_sql_like传入第二个参数指定,例如ActiveRecord::Base.sanitize_sql_like(options[:book_name], '!')会用!作为转义符替代默认的\
  • 转义后用户输入的%、_等特殊字符会被当做普通文本匹配,不会触发通配符逻辑

内容的提问来源于stack exchange,提问作者Bhim rav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:27:03