如何在 GORM 中动态设置 where 子句
How to set where clause dynamically in GORM
我会收到一个map[string][]string
。对于地图中的每个键,我想添加如下的 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)
}
我会收到一个map[string][]string
。对于地图中的每个键,我想添加如下的 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)
}