首页 > 解决方案 > 如何使用 exec_params where params in ('','','')

问题描述

我用

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

我尝试了一下,但还没有工作。可以尝试做类似的事情,以一个例子为基础吗?还是他错了?

标签: ruby-on-railsrubypostgresqlparameterspg

解决方案


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。假设表名是事物。调用ActivceRecord Thing,然后where使用数组作为值调用。

class Thing < ActiveRecord
end

things = Thing.where(type: ["a", "b", "c"]

推荐阅读