Проблема вставки строки в базу данных sqlite3 с библиотекой ruby - PullRequest
1 голос
/ 26 мая 2011

Я абсолютный новичок. У меня есть база данных с таблицей под названием OUTPUTS, где все столбцы имеют тип integer. Я пытаюсь вставить строку в выходных данных с помощью следующего сценария ruby:

require 'rubygems'
require 'sqlite3'
...
db=SQLite3::Database.new("development.sqlite3")
db.execute( "INSERT into OUTPUTS (user_id,eac,pac,vac,iac,epv,ppv,vpv) VALUES (10,@eac,@pac,@vac,@iac,@epv,@ppv,@vpv);" )

После запуска этого скрипта я получаю новую строку, и столбец user_id содержит 10, как и ожидалось, но остальные столбцы пусты, хотя я проверил, что все переменные (@eac, @pac, и т.д.) действительно содержат значения. Что не так с моим синтаксисом?

1 Ответ

2 голосов
/ 26 мая 2011

Вы отправляете имена переменных в sqlite, а не их значения.Это то, что вы хотите:

db.execute( "INSERT into OUTPUTS (user_id,eac,pac,vac,iac,epv,ppv,vpv)
VALUES (10,#{@eac},#{@pac},#{@vac},#{@iac},#{@epv},#{@ppv},#{@vpv});" )

Но еще лучше было бы использовать привязку переменных следующим образом:

db.execute( "INSERT into OUTPUTS (user_id,eac,pac,vac,iac,epv,ppv,vpv) 
VALUES (10,?,?,?,?,?,?,?)",
@eac,@pac,@vac,@iac,@epv,@ppv,@vpv)

(я мог ошибиться в подсчете).

Ознакомьтесь с Как использовать заполнители в выражении SQL? , чтобы узнать больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...