这是我第一次看到这个问题。我正在构建一个SQL数组来运行sanitize SQL数组,Rails正在返回值中添加额外的、不必要的单引号。所以不要再回来了:

SELECT DISTINCT data -> 'Foo' from products

它返回:
SELECT DISTINCT data -> ''Foo'' from products

博士后当然不喜欢。
代码如下:
sql_array = ["SELECT DISTINCT %s from products", "data -> 'Foo'"]
sql_array = sanitize_sql_array(sql_array)
connection.select_values(sql_array)

请注意,当我使用较短且更常见的选项时,也会发生同样的情况:
sql_array = ["SELECT DISTINCT %s from products", "data -> 'Foo'"]
connection.select_values(send(:sanitize_sql_array, sql_array))

以前见过这个吗?这和使用HStore有关系吗?我确实需要清理字符串,因为字符串Foo实际上来自用户输入的变量。
谢谢!

最佳答案

sanitize_sql_array一个包含hstore表达式的字符串,希望sanitize_sql_array理解该字符串包含一些hstore内容;这要求太高,sanitize_sql_array只知道字符串和数字之类的简单内容,不知道如何解析PostgreSQL的SQL扩展甚至标准SQL。例如,您希望sanitize_sql_array如何区分恰好包含'11 * 23'的字符串和应该表示算术表达式的字符串之间的区别?
您应该将11 * 23分成两部分,以便data -> 'Foo'只在清理内容时看到字符串部分:

sql_array = [ 'select distinct data -> ? from products', 'Foo' ]
sql = sanitize_sql_array(sql_array)

这将为您提供所需的SQL:
select distinct data -> 'Foo' from products

关于ruby-on-rails - sanitize_sql_array在查询中添加了多余的多余引号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12696727/

10-10 17:20