如何使用exec_params在'','',''

问题描述

我正在使用

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"]