sql - 如何在 GORM 中动态设置 where 子句

标签 sql go go-gorm

我将收到一个map[string][]string。对于 map 中的每个键,我想添加如下所示的 where 子句。

inFilter := map[string][]string{"product_id": []string{"3", "69"}}
for key, value := range inFilter {
        filterQuerable = filterQuerable.Where("(?) IN (?)", key, value)
    }

它不起作用。我尝试了以下方法,但也不起作用

filterQuerable = filterQuerable.Where("(?) IN (?)", "product_id", []string{"3", "69"})

只有以下代码有效

filterQuerable = filterQuerable.Where("product_id IN (?)",  []string{"3", "69"})

最佳答案

我现在看到问题了。 ? 用于值,而不是列名。如果您可以 100% 信任输入的来源,那么简单的字符串替换就可以了。如果您允许来自用户的数据,那么您应该非常小心并验证/清理列名称。

这应该有效。

inFilter := map[string][]string{"product_id": []string{"3", "69"}}
for key, value := range inFilter {
   filterQuerable = filterQuerable.Where(key + " IN (?)", value)
}

关于sql - 如何在 GORM 中动态设置 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58525268/

相关文章:

sql - 修改层次数据闭包表的风险和好处

sql - 如何处理从类型 'DBNull' 到类型 'Integer' 的转换无效

go - 如何在 GORM 中进行多表连接

Gorm AutoMigrate() 和 CreateTable() 不工作

GORM 连接和结果

sql - 从 CRM 2015 中的日历查询工作日

php - 加速 SQL 循环

unit-testing - Golang中Stubb接口(interface)指针参数

go - 有没有办法覆盖包?

go - 编译错误 : Non-Constant Array Bound (Dynamic Programming)