簡體   English   中英

在 rails 中提供准備好的語句

[英]Provide prepared statement in rails

我正在使用 rails-4.2.1 並試圖在單個查詢中從兩個表主題和選修主題表中獲取數據。 由於 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注入

這個問題太老了,不再關心了,但我認為這是一個有效的問題,所以這里是答案:

query = "(SELECT id as id, name as name, reference as reference from subjects where name like $1) 
         UNION
         (SELECT id as id, name as name, null as reference from elective_subjects where name like $1)"

binds = [ActiveRecord::Relation::QueryAttribute.new('name', search, ActiveRecord::Type::Text.new)]

result = ApplicationRecord.connection.exec_query(query, 'SQL', binds, prepare: true)

@subjects = result.rows

這就是在 rails 中創建和使用准備好的語句的方式。

我已經通過使用以下語句轉義搜索字符串解決了這個問題。

search = Mysql2::Client.escape(search)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM