我正在尝试查找数组中具有值的所有行,这是我的代码
require 'sqlite3'
db = SQLite3::Database.new('test.sqlite')
res = db.query("SELECT w1.synsetid
FROM words w1
WHERE w1.wordid IN (?)", arr)
Run Code Online (Sandbox Code Playgroud)
arr:字符串数组
我收到这个错误
SQLite3::RangeException: bind or column index out of range
Run Code Online (Sandbox Code Playgroud)
有帮助吗?
第二个参数query是占位符值的数组:
- (Object) query(sql, bind_vars = [], *args)这是创建语句、将参数绑定到它并调用执行的便捷方法:
该query方法不知道它应该arr特殊对待您的数组,它只看到一个占位符和多个值。
我认为您必须以这种困难的方式做到这一点:构建适当数量的占位符并将它们粘贴到 SQL 中。像这样的东西:
placeholders = (['?'] * arr.length).join(',')
res = db.query("select ... where w1.wordid in (#{placeholders})", arr)
Run Code Online (Sandbox Code Playgroud)
您确切地知道其中的内容placeholders,因此在像这样构建 SQL 时不必担心使用字符串插值和注入问题。
如果您已经在使用 Rails,那么您还可以使用 ActiveRecord 包装 SQLite 表,然后使用通常的 ActiveRecord 接口:
words = Word.where(:wordid => arr)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1677 次 |
| 最近记录: |