我刚开始使用SQLite3和Ruby的数据库。我在这里遇到了我的ruby代码的问题。
我想创建一个代码,用户将另一条记录添加到数据库中。现在这是我的问题。
用户sawa找到了我的第一个问题的解决方案。谢谢!
新问题*
puts "Enter name for the new user"
x = gets.chomp
puts "Enter the type of the user"
y = gets.chomp
$db.execute('insert into customers(id,name,type) values (11,"#{x}","#{y}")')
当我运行此代码并输入x任何y值时,它将在我的数据库#{x}和#{y}中返回,而不是我创建的值。
答案 0 :(得分:3)
你实际上这一切都是错的。您根本不应该对SQL使用字符串插值,您应该使用占位符和绑定变量。 README even includes an example:
# Execute a few inserts
{
"one" => 1,
"two" => 2,
}.each do |pair|
db.execute "insert into numbers values ( ?, ? )", pair
end
并且fine manual甚至在第二句中提到了绑定变量:
<强>
- (Object) execute(sql, bind_vars = [], *args, &block)
强>执行给定的SQL语句。如果给出了其他参数,则将它们视为绑定变量,并绑定到查询中的占位符。
所以你应该这样说:
$db.execute('insert into customers (id, name, type) values (?, ?, ?)', 11, x, y)
或者这个:
$db.execute('insert into customers (id, name, type) values (?, ?, ?)', [11, x, y])
答案 1 :(得分:2)
如警告所示,请勿使用单引号。使用双引号。单引号中的表达式不会被忽略。它们按字面意思进行评估。