我是一个新手。我有一个名为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,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?了解更多详细信息。

10-05 18:48