Skip to content

Instantly share code, notes, and snippets.

@raismaulana
Created September 23, 2022 06:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save raismaulana/9987dae4097bc224a1554c2ea35b772c to your computer and use it in GitHub Desktop.
Save raismaulana/9987dae4097bc224a1554c2ea35b772c to your computer and use it in GitHub Desktop.
safe_array_query.go
func query(db *sql.DB, name []string) {
query := fmt.Sprint("select id, name, grade from students ")
where := "where "
params := interface{}{}
if len(names) > 0 {
q, p := prepareStringArray(names, len(params))
params = append(params, p...)
where += fmt.Sprintf(`AND t.id IN (%v) `, q)
}
query = query + where
rows, err := db.Query(query, params...)
if err != nil {
fmt.Println(err.Error())
return
}
}
// input given:[]string{"A","B"}, 1
// return "$2,$3", []interface{}{"A","B"}
func prepareStringArray(val []string, lastSequence int) (q string, p []interface{}) {
for i, v := range val {
lastSequence++
if i != 0 {
q += ","
}
q += fmt.Sprintf("$%d", lastSequence)
p = append(p, v)
}
return
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment