转义包含通配符(如%(和_))的LIKE参数



GORM文档中有一个如何使用LIKE条件的示例:

// LIKE
db.Where("name LIKE ?", "%jin%").Find(&users)
// SELECT * FROM users WHERE name LIKE '%jin%';

这种方法的问题是,如果jin是用户输入变量,它可以包含像%这样的通配符。我如何逃脱这种通配符?

对我来说,这些符号必须用在左边,比如:

db.Where("name LIKE %?%", "jin").Find(&users)

db.Where("name LIKE '%' || ? || '%'", "jin").Find(&users)

ORM应该自动转义参数,但它的行为并非如此。

什么是正确的解决方案?

尝试显式替换通配符:

db.Where("name LIKE '%' || replace(replace(?, '%', '%), '_', '_') || '%'", "jin").Find(&users)

显式转义。

db.Where("name like '%'||?||'%' escape ''", userinput)

并且在传递到CCD_ 3之前预先转义用户输入中的通配符符号。用户输入中的反斜线也应加倍。

无关,但我更喜欢正则表达式~~*运算符,而不是like

相关内容

  • 没有找到相关文章

最新更新