使用红宝石中的续集获取功能在双引号内单引号转义

时间:2014-05-08 10:01:08

标签: ruby sequel

当我使用续集的fetch函数在查询中使用IN语句时使用原始SQL,我无法通过写入内容来逃避单引号...

@values='stuff1\'','stuff2\''

db.fetch("query...where IN (?)", "#{@values}")

输出query...where stuff IN ('stuff1'',''stuff2')而不是('stuff1','stuff2')

相当令人沮丧的是,我可能不得不为原始查询编写续集等效或仅因为此转义问题而使用不同的ORM。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

你应该做的事情如下:

@values = ['stuff1', 'stuff2']
db.fetch("query...where IN ?", @values)

答案 1 :(得分:0)

如果我正确理解Sequel documentation,使用String#litSequel.lit应该将Ruby字符串转换为文字字符串并绕过自动转义机制;因此,这应该工作(未经测试):

@values='stuff1\'','stuff2\''.lit

db.fetch("query...where IN (?)", "#{@values}")

使用原始SQL字符串时常见的警告(SQL注入攻击,由于强制重新解析语句等而导致效率低下的SQL)适用: - )