2 回答
TA贡献1887条经验 获得超5个赞
但是,有一个解决方案。首先,由于我们只能有一个爆炸参数而没有其他参数,因此我们应该首先将我们的参数放在一个[]slice:
var params []interface{}
params = append(params, Type)
for _, subtype := range SubTypes {
params = append(params, SubTypes)
}
由于 SQL 不会自行扩展,让我们扩展该循环:
var params []interface{}
params = append(params, Type)
inCondition := ""
for _, subtype := range SubTypes {
params = append(params, SubTypes)
if inCondition != "" {
inCondition += ", "
}
inCondition += "?"
}
假设SubTypes包含[]int{1,2,3},inCondition现在应该包含?, ?, ?。
然后我们将它组合到我们的 SQL 语句中并分解参数:
sqlstr := fmt.Sprintf(`SELECT *
FROM foo
WHERE type = ?
AND subtype IN (%s)`, inCodition)
rows, err := sqldb.Query(sqlstr, params...)
当然,如果您可以简单地将[]slices传递给准备好的语句,并且自动展开,那就太酷了。但是,如果您正在处理更多“未知”数据,这可能会产生一些意想不到的结果。
- 2 回答
- 0 关注
- 208 浏览
添加回答
举报