gpt4 book ai didi

mysql - 如何在 Ruby/Rails activerecord sql 条件中包含反斜杠?

转载 作者:太空宇宙 更新时间:2023-11-03 12:12:05 24 4
gpt4 key购买 nike

我正在尝试搜索与特定正则表达式匹配的所有条目。

match_rules = "(^|\W)#{word}(\W|$)"
@dogs += Dog.where(["owner REGEXP :term", {:term => match_rules}])

希望这非常简单,但产生的行为有点奇怪。生成的 sql 如下所示:

SELECT `dogs`.* FROM `dogs`  WHERE (name REGEXP '(^|W)doe(W|$)')

当我想要它看起来像的时候

SELECT `dogs`.* FROM `dogs`  WHERE (name REGEXP '(^|\W)doe(\W|$)')

问题是它删除了我的反斜杠符号——这是查询功能的一个非常关键的部分!这里明显的错误是Ruby双引号字符串中的反斜杠需要转义,所以我们可以写成

match_rules = "(^|\\W)#{word}(\\W|$)"

并让它保留在我们的字符串中...但是当我尝试插入它时,我得到:

SELECT `dogs`.* FROM `dogs`  WHERE (name REGEXP '(^|\\W)doe(\\W|$)')

这意味着它在插入这些反斜杠之前“转义”它们。我怎样才能避免这种情况?

最佳答案

您可以使用单引号来避免文字转义:

match_rules = '(^|\W)#{word}(\W|$)'

此外,您如何检查生成的 SQL? Ruby 可以向您显示已转义或未转义的信息,具体取决于您使用的 API:

sql = "SELECT `dogs`.* FROM `dogs`  WHERE (name REGEXP '(^|\\W)doe(\\W|$)')"
puts sql
# SELECT `dogs`.* FROM `dogs` WHERE (name REGEXP '(^|\W)doe(\W|$)')
p sql
# "SELECT `dogs`.* FROM `dogs` WHERE (name REGEXP '(^|\\W)doe(\\W|$)')"

关于mysql - 如何在 Ruby/Rails activerecord sql 条件中包含反斜杠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23851615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com