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

我正在尝试在数组中查找所有具有值的行,这是我的代码

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 

任何帮助?

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

- (Object) query(sql, bind_vars = [], *args)

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

query方法不知道它应该特别处理你的arr数组,它只看到一个占位符和多个值。

我认为你必须这么做:建立适当数量的占位符并将它们粘贴到SQL中。 像这样的东西:

 placeholders = (['?'] * arr.length).join(',') res = db.query("select ... where w1.wordid in (#{placeholders})", arr) 

您确切知道placeholders是什么,因此您在构建SQL时不必担心使用字符串插值和注入问题。

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

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