golang在使用go-sql-driver的时候,如果想用in
语句那么?
的个数必须是确定的。传入参数即使是字符串1,2,3,4
也不行。
A ? can not match anything changing the execution plan of the statement after it is prepared.
https://github.com/go-sql-driver/mysql/issues/176
解决办法,根据传入参数生成确定的问号,比如 ?,?,?
queryEvents := "... WHERE id in(%s) "
ids := []string{"a","b"}
tmpQueryEvents := fmt.Sprintf(queryEvents,strings.Join(strings.Split(strings.Repeat("?", len(ids)),""),","))
fmt.Println(tmpQueryEvents)
rows, err = db.db.Query(tmpQueryEvents, ConvertToInterfaces(ids)...)
query不能传入slience
所以必须转换ConvertToInterfaces
func ConvertToInterfaces(slice []string) []interface{} {
s := make([]interface{}, len(slice))
for i, v := range slice {
s[i] = v
}
return s
}
费劲。。。
公众号
扫码订阅最新深度技术文,回复【资源】获取技术大礼包
评论