当前位置: 首页 > 面试题库 >

在连接中使用占位符

公孙弘图
2023-03-14
问题内容

我试图通过用联接上的参数替换来避免任何SQL注入漏洞。

Category.joins("LEFT OUTER JOIN incomes ON incomes.category_id = categories.id AND incomes.dept_id = ?", params[:Dept])

这会尝试执行带有问号的查询,而不是将其替换为参数。这样做的正确方法是什么?

编辑:

查询需要返回以下内容:

SELECT categories.* 
FROM "categories" 
LEFT OUTER JOIN incomes 
ON incomes.category_id = categories.id AND incomes.dept_id = 86

不是

SELECT categories.* 
FROM "categories" 
LEFT OUTER JOIN incomes 
ON incomes.category_id = categories.id 
WHERE incomes.dept_id = 86

结果截然不同!


问题答案:

一种选择是使用sanitize_sql_array方法。但是,它是一种受保护的方法,因此在您的类别模型上,您可以执行以下操作:

class Category < ActiveRecord::Base
  def self.income_for_dept(dept)
    Category.joins(sanitize_sql_array(["LEFT OUTER JOIN incomes ON incomes.category_id = categories.id AND incomes.dept_id = ?", dept]))
  end
end

然后,您将这样称呼它:

Category.income_for_dept(params[:Dept])

Ruby提供了一些其他方法(如果需要)来获得该方法,而无需在Category中创建类方法。



 类似资料:
  • 问题内容: 是否可以在占位符中使用Font Awesome Icon?我读到了占位符不允许HTML的地方。有解决方法吗? 问题答案: 您无法添加图标和文本,因为您无法将其他字体应用于占位符的一部分,但是,如果您对仅图标感到满意,那么它就可以工作。FontAwesome图标只是带有自定义字体的字符(您可以在规则中查看FontAwesome备忘单中转义的Unicode字符。在较少的源代码中,可以在[变

  • 问题内容: 我正在使用Spring和struts,并且在“ /META-INF/context.xml”中具有以下条目 是否可以通过以下方式实现, 我的applicationContext.xml具有以下内容, 我想从属性文件中选取jdbc.username和jdbc.pwd的值。 问题答案: 使用Spring的PlaceholderPropertyConfigurer(仅替换Spring上下文中

  • 我有困难使用在我的函数,采取可变模板。我开始认为我不需要使用可变模板,但我已经尝试了这么久,我在杂草中思考,需要一个有新面貌的人。 下面的模板函数接受一个常规模板参数,然后接受一个可变参数。它导致编译器错误: 编译器错误: 错误1错误C2664:“状态组件::registerEvent” 这里到底出了什么问题?我如何修复这个编译器错误?

  • 我正在使用Java和spring boot。我想知道如何将Property占位符添加到文件。我找到了一些清晰的示例,但我不确定Property占位符在哪里实例化。它是否在系统env变量、文件等中。。? Bootstrap.yml 用户正在使用属性占位符,但用户在哪里声明了它们?这个 .yml 从哪里读取值?(与上述问题相同)是否有解释连接的文档? 此Web应用程序将使用“cf推送”推送到云代工厂,

  • 问题内容: 我有一个使用Logback的Spring Boot控制台应用程序。所有属性(针对应用程序和Logback)都被外部化为类路径中的标准application.properties文件。在应用程序本身中可以很好地拾取这些属性,但在logback.xml文件中不会拾取这些属性。在Spring Boot启动之前,似乎好像处理了logback.xml,因此未处理EL占位符。 以FileNameP

  • 我有一个使用Logback的Spring Boot控制台应用程序。所有属性(应用程序和日志)都外部化到类路径中的标准application.properties文件中。这些属性在应用程序本身中可以很好地提取,但在logback.xml文件中不能提取。看起来好像是在Spring Boot启动之前处理了logback.xml,因此没有处理EL占位符。 使用FileNamePattern作为示例,在ap