ruby中使用数组的数据库查询

ruby中使用数组的数据库查询,ruby,sqlite,Ruby,Sqlite,我试图在数组中找到所有有值的行,这是我的代码 require 'sqlite3' db = SQLite3::Database.new('test.sqlite') res = db.query("SELECT w1.synsetid FROM words w1 WHERE w1.wordid IN (?)", arr) arr:字符串数组 我得到了这个错误 SQLite3::RangeException: bind or col

我试图在数组中找到所有有值的行,这是我的代码

require 'sqlite3'
db = SQLite3::Database.new('test.sqlite')
res = db.query("SELECT w1.synsetid
                FROM words w1
                WHERE w1.wordid IN (?)", arr)
arr:字符串数组

我得到了这个错误

SQLite3::RangeException: bind or column index out of range
有什么帮助吗?

的第二个参数是占位符值的数组:

-(对象)查询(sql,bind_vars=[],*args)

这是一种创建语句、绑定的方便方法 参数,并调用execute:

query
方法不知道它应该专门处理
arr
数组,它只看到一个占位符和多个值

我认为您必须这样做:构建适当数量的占位符并将它们粘贴到SQL中。大概是这样的:

placeholders = (['?'] * arr.length).join(',')
res = db.query("select ... where w1.wordid in (#{placeholders})", arr)
您完全知道
占位符中的内容,因此在这样构建SQL时,不必担心使用字符串插值和注入问题

如果您已经在使用Rails,那么还可以使用ActiveRecord包装SQLite表,然后使用常用的ActiveRecord接口:

words = Word.where(:wordid => arr)