在rails中提供准备好的声明

时间:2017-11-16 07:37:47

标签: mysql ruby-on-rails

我正在使用rails-4.2.1并且正在尝试从单个查询中的两个表subject和elective_subjects表中获取数据。由于rails 4不支持UNION,我编写了一个原始的sql查询。我想在两个表中按名称搜索。我的代码如下:

query = "(SELECT id as id, name as name, reference as reference from subjects where name like '#{search}') UNION (SELECT id as id, name as name, null as reference from elective_subjects where name like '#{search}')"

@subjects =  ActiveRecord::Base.connection.execute(query)

它正在工作,但当我提供'在我的搜索中查询中断。那么我怎样才能使它成为一个准备好的声明。这样可以避免sql注入

2 个答案:

答案 0 :(得分:0)

我通过使用以下语句转义搜索字符串来解决问题。

search = Mysql2::Client.escape(search)

答案 1 :(得分:0)

这个问题已经过时了,不再管它了,但是我认为这是一个有效的问题,所以这里是答案:

Cannot read property 'authenticate' of null

这就是您在Rails中创建和使用准备好的语句的方式。