如何使用“?” MySQL select 中的符号 Ruby 在 Rails 上?
How to use the '?' symbol in a MySQL select in Ruby On Rails?
我需要在我的 Rails 4.2 应用程序中获得 MySQL 全文搜索的针对性。所以我需要在 select 子句中使用别名(相关性)。
问题是使用'?'符号在 where 子句中,但在 select:
中
Model.select("articles.*, MATCH (name) AGAINST (? IN BOOLEAN MODE) AS pertinence", @search).where(...).order("pertinence DESC")
如果我这样做:
Model.select('articles.*, MATCH (name) AGAINST ("' + @search + '" IN BOOLEAN MODE) AS pertinence').where(...).order("pertinence DESC")
我在@search(未清理)和 SQL 注入中可能遇到引号问题。
那么如何使用 Active Record 执行此类查询?
谢谢
您可以手动清理搜索参数。
search_param = ActiveRecord::Base::sanitize(@search)
Model.select("articles.*, MATCH (name) AGAINST (#{search_param} IN BOOLEAN MODE) AS pertinence").where(...).order("pertinence DESC")
我需要在我的 Rails 4.2 应用程序中获得 MySQL 全文搜索的针对性。所以我需要在 select 子句中使用别名(相关性)。
问题是使用'?'符号在 where 子句中,但在 select:
中Model.select("articles.*, MATCH (name) AGAINST (? IN BOOLEAN MODE) AS pertinence", @search).where(...).order("pertinence DESC")
如果我这样做:
Model.select('articles.*, MATCH (name) AGAINST ("' + @search + '" IN BOOLEAN MODE) AS pertinence').where(...).order("pertinence DESC")
我在@search(未清理)和 SQL 注入中可能遇到引号问题。
那么如何使用 Active Record 执行此类查询?
谢谢
您可以手动清理搜索参数。
search_param = ActiveRecord::Base::sanitize(@search)
Model.select("articles.*, MATCH (name) AGAINST (#{search_param} IN BOOLEAN MODE) AS pertinence").where(...).order("pertinence DESC")