问题描述
||
我是一个新手。我有一个数据库,其中有一个名为OUTPUTS的表,其中所有列都是整数类型。我正在尝试使用以下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等)都可以,其余的列还是空的确实包含价值。我的语法有什么问题?
解决方法
您正在将变量名称发送给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,vpv)
VALUES (10,?,?)\",@eac,@pac,@vac,@iac,@epv,@ppv,@vpv)
(我可能在那里弄乱了我的人数)。
查看如何在SQL语句中使用占位符?有关更多详细信息。