2011-05-26 84 views
0

我是一个总新手。我有一个名为OUTPUTS的表,其中所有列的类型都是整数。我试图插入行输出具有以下Ruby脚本:麻烦插入sqlite3数据库与红宝石库的行

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等)确实包含值,列也是空的。我的语法有什么问题?

+0

想通了。仍然不完全确定为什么上述方法不起作用,但是这样做: – pitachip 2011-05-26 17:23:54

+0

st = db.prepare(“INSERT into OUTPUTS(user_id,eac,pac,vac,iac,epv,ppv,vpv)VALUES(?,?,? (10,@ eac,@ pac,@ vac,@ iac,@ epv,@ ppv,@ vpv) – pitachip 2011-05-26 17:25:22

+0

请参阅下文,但基本上可以'把变量放到一个字符串中并让它们渲染而不用将它们包装在#{}中 - 但是你的解决方案无论如何都是更好的,因为绑定几乎总是要走的。 – muffinista 2011-05-27 13:13:40

回答

1

您正在将变量的名称发送到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) 

(也许是我搞砸了我的计有)。

查看How do I use placeholders in an SQL statement?了解更多详情。