gpt4 book ai didi

sql - 使用带连接的占位符

转载 作者:数据小太阳 更新时间:2023-10-29 08:23:55 24 4
gpt4 key购买 nike

我试图通过在连接中替换为我的参数来避免任何 SQL 注入(inject)漏洞。

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方法。但是,它是一种 protected 方法,因此您可以在您的类别模型上执行以下操作:

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 中创建类方法即可获取该方法。

关于sql - 使用带连接的占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14420698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com