在rails中,如果我尝试使用where:
获取对象Customer.where(:name => "abc")
日志文件显示未使用任何数据库绑定。
WHERE "apps"."name" = 'abc'
现在,如果我创建一个新对象
Customer.create(:name => "abc", :field => 1)
rails使用参数
INSERT INTO "customers" ("name", "field") VALUES (?, ?)
如何让rails在哪里使用数据库参数绑定?
以下语句也会生成相同的位置
Customer.where(“name =?”,“abc”)
答案 0 :(得分:2)
在Rails 3.1中,使用预备语句,因此您将看到如下查询:
SELECT * FROM customers WHERE customers.name = ? [["name", "abc"]]
据我所知,这适用于Postgres而非MySql。
无论如何,您无需担心SQL注入。请阅读Rails内置的针对SQL注入的保护:http://guides.rubyonrails.org/security.html#sql-injection