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

Knex.js中使用ilike绑定URL字符串时如何转义特殊字符?

解决Knex.js中Postgres ilike查询变量绑定失效问题

问题核心

直接将变量通过模板字符串拼接进whereRaw的SQL语句中,虽然控制台显示的SQL和写死字符串的版本一致,但实际执行时Postgres的字符串转义逻辑、Knex的参数处理规则会导致查询不匹配;同时这种写法存在SQL注入风险。

正确解决方案

方法1:使用whereRaw的参数绑定(推荐)

通过Knex的参数占位符传递变量,自动处理特殊字符转义,避免SQL注入:

const url = 'domain.com/path-string-here/';

knex("table")
  .select()
  .whereRaw("column_name ilike ?", [`%${url}%`])

方法2:使用Knex内置的whereILike方法

Knex提供了专门适配ilike的方法,无需手动编写原生SQL:

const url = 'domain.com/path-string-here/';

knex("table")
  .select()
  .whereILike('column_name', `%${url}%`)

方法3:用knex.raw构造参数化查询

适合需要复杂SQL组合的场景,同样通过参数占位符传递变量:

const url = 'domain.com/path-string-here/';

knex("table")
  .select()
  .where(knex.raw('column_name ilike ?', [`%${url}%`]))

关键注意事项

  • 若变量url中包含%、_这类ilike通配符,参数绑定方式会自动转义,确保它们被当作普通文本匹配,而非匹配规则
  • 绝对禁止直接用模板字符串拼接变量到SQL语句中,这不仅会引发匹配问题,还会带来SQL注入风险

内容的提问来源于stack exchange,提问作者Jim Burch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:54:25