Я думаю, вы получаете массив, представляющий список совпадений, хотя в этом случае возвращается только одна строка.Кроме того, сама строка является массивом значений, хотя в этом случае строка будет массивом только одного значения.Таким образом, вы должны сравнивать t[0][0]
, а не просто t
. Вы можете использовать функцию db.get_first_value
вместо этого, чтобы упростить это.
(Это предполагает, что name
уникален; вывероятно, вы хотите использовать ограничение UNIQUE
в схеме базы данных как для id
, так и для name
.)
(И, да, вы должны принять предупреждение @ tadman близко к сердцу.)
Итак, вот минимально измененная версия кода, который вы разместили выше ( без предлагаемых улучшений), который дает желаемый результат:
#!/usr/bin/env ruby
require 'sqlite3'
db = SQLite3::Database.new(':memory:')
db.execute("CREATE TABLE IF NOT EXISTS auth(id int, name text, password text)")
db.execute("INSERT INTO auth(id, name, password) VALUES(?, ?, ?)",
[1, 'Bugs', 'Carrots'])
t = db.execute("SELECT password FROM auth WHERE name = 'Bugs'")
if t[0][0] == 'Carrots'
puts "yes"
end