我正在尝试在数组中查找所有具有值的行,这是我的代码
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
任何帮助?
答案 0 :(得分:3)
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)