【问题标题】:SQL query IN using Ruby array使用 Ruby 数组的 SQL 查询 IN
【发布时间】:2013-08-18 16:37:59
【问题描述】:

我在 ruby​​ 2.0.0 @temp = [3, 4] 中有一个数组,我想在 SQL IN 语句中使用它。所以我想删除括号([, ])。

我的 SQL 查询:

SELECT E.id,E.name, CEU.attempt, E.total_mark, CEU.has_attended as attendance, CE.id as categoryexamId, CE.examtype_id as examType, CU.id as categoryuserId, U.name as username

      FROM exams E
      Inner Join categoryexams CE on E.id = CE.exam_id
      Inner Join categoryexamusers CEU on CE.id = CEU.categoryexam_id
      Inner Join categoryusers CU on CEU.categoryuser_id = CU.id
      Inner Join categories C on CE.category_id = C.id
      Inner Join users U on CU.user_id = U.id
      Inner Join examtypes ET on CE.examtype_id = ET.id
      WHERE CE.category_id = #{category_id} AND CEU.has_attended = 1 AND U.id = #{user} AND CE.currentyear = #{academicYear} AND CE.examtype_id = #{examtype}" + (@temp.blank? ? "" : " AND CEU.categoryexam_id NOT IN (#{@temp})") +
      " Group By CE.id;

【问题讨论】:

标签: sql ruby-on-rails ruby arrays


【解决方案1】:

使用Active Record,在使用“哈希条件”格式时可以直接使用数组,它会自动将其转换为正确的SQL:

MyModel.where(column: [3, 4])

查看 Rails 指南关于 Active Record 查询"Subset Conditions" 2.3.3

【讨论】:

  • 尽可能频繁地使用 Rails Active Record 创建查询。这可以保护您免受 SQL 注入攻击。
【解决方案2】:

如果你想在 where 查询中使用这个作为字符串。你可以写成:

@temp.join(',')

希望,它会起作用。

【讨论】:

  • -1 这允许向查询中添加更多潜在的 SQL 注入。
  • 你怎么知道查询将面对用户输入?
猜你喜欢
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 2017-01-12
  • 2010-09-25
相关资源
最近更新 更多