我有一个数组
ziparray = ["95626", "95645", "95837"]
我想将此传递给我的sql查询,
sql = "SELECT * from table_name WHERE code in ($1);"
res1 = conn.exec(sql, [ziparray])
它确实适用于单个值。
我正在使用pg gem,并使用
连接到数据库conn = PG.connect()
我正在使用postgres,并且不需要双引号。我认为这就是问题所在。 如何实现这一目标。
更新
我可以使用
转换为所需的字符串str = "'"
str << ziparray.join("','")
str << "'"
#print str
但是我想问题是传递了多个参数。
这有效-
res1 = conn.exec(fipscodesql, ['95626'])
但不是
res1 = conn.exec(fipscodesql, ['95626', '95625'])
这正是我将数组转换为字符串时所做的事情。我猜这不是使用参数的正确方法。 还有其他方法吗?
答案 0 :(得分:4)
正如其他人所说,您无法参数化整个数组。改用它:
ziparray = ["95626", "95645", "95837"]
zip_placeholders = ziparray.map.with_index(1) { |_, i| "$#{i}" }.join(', ')
sql = "SELECT * from table_name WHERE code in (#{zip_placeholders});"
# => "SELECT * from table_name WHERE code in ($1, $2, $3)"
然后您可以使用常规参数绑定。
答案 1 :(得分:0)
SQL方法“ IN”不使用数组。
所以:
IN(234) - correct
IN(234,543) - correct
IN([234,543]) - wrong
您可以尝试将数组转换为字符串,并传递变量$ 1,例如“ 95626、95645、95837”
答案 2 :(得分:0)
[ziparray] .map {| zip | “'#{zip}'”} .join(',')
答案 3 :(得分:-1)
如果x
是一个数组,并且x = ['a','b','c']
quotes = (select * from quote in (?), x)
x.join(',')
返回"a,b,c"
。如果它是int
,那么这不是问题。 a = x
,然后使用quotes = (select * from quote in (?),a)