问题描述
我正在使用
sql = "Select * from table where type in ($1)
pg_con = PG::Connection.open(myserver)
pg_con.exec_params(sql,[get_type_action])
get_type_action返回格式为“'test1','test2','test3'”等的所有类型,等等...类型为0-90的计数。 所有代码返回0行。我开始寻找问题。我输入了一个不带''的值“ test1”而不是一个函数,并获得了所需的结果。但是尝试输入多个值“ test1,test2”,我得到了0行。我在做什么错了?
更新1 我不能为此使用活动记录。但我找到了例子
a = ['alpha','bravo','ccharlie']
b = $conn.exec_params( %Q{ SELECT id FROM tablename WHERE fieldname IN ( $1 ) },[ PG::TextEncoder::Array.new.encode(a) ] )
我尝试过,但是还无法正常工作。可以尝试以示例为基础做类似的事情吗?还是他错了?
解决方法
PG不会为您构建SQL。 in
列表中的每个元素必须是其自己的参数。
sql = "select * from table where type in ($1,$2,$3)"
pg_con = PG::Connection.open(myserver)
p pg_con.exec_params(sql,["a","b","c"]).values
但是,由于您使用的是Ruby on Rails,因此无需编写简单的SQL。使用ActiveRecord。假设表名称是事物。制作一个名为Thing
的ActivceRecord,然后使用数组作为值调用where
。
class Thing < ActiveRecord
end
things = Thing.where(type: ["a","c"]