下面是查询语句 ,是不是因为又在后面通过 if 拼接了含有参数的语句?
countStr := "SELECT COUNT(*) AS count FROM bill AS BH WHERE (BH.type = 1 OR BH.type = 2)"
params := []interface{}{}
if start != "" && end != "" {
countStr += " AND BH.t >= ? AND BH.t <= ?"
params = append(params, start, end)
}
if len(names) > 0 {
countStr += " AND BH.user_id IN (?" + strings.Repeat(",?", len(names)-1) + ")"
params = append(params, names)
}
if err := db.Raw(countStr, params...).Scan(&result).Error; err != nil {
return nil, err
}
Comment From: easternK
请问能这样拼接sql么。我也是需要通过判断参数来拼接sql语句
Comment From: zhangshp
能拼接,但是要注意interface slice与其他具体类型的slice的区别。
Comment From: letmetodo
您这里说的是什么意思可以说下么?我在where条件中如果传入 interface slice 会报 sql: expected 55 arguments, got 28 传入string slice表现正常,您说的是一个事情么