2 回答

TA貢獻1856條經驗 獲得超11個贊
func prepareWhereINString(count int) string {
var paramrefs string
for i := 0; i < count; i++ {
paramrefs += `$` + strconv.Itoa(i+1) + `,`
}
paramrefs = paramrefs[:len(paramrefs)-1] // remove last ","
return paramrefs
}

TA貢獻1806條經驗 獲得超5個贊
如您所知,IN需要一個標量表達式列表,而不是數組,但是pgtype.Int4Array表示一個數組,而不是標量表達式列表。
“IMO 雖然這有點容易出錯,因為你必須自己處理轉義/sql 注入等。”
不一定,您可以遍歷您的數組,構造一個參數引用字符串,將其連接到查詢,然后執行它傳遞數組與....
var paramrefs string
ids := []interface{}{1,2,3,4}
for i, _ := range ids {
paramrefs += `$` + strconv.Itoa(i+1) + `,`
}
paramrefs = paramrefs[:len(paramrefs)-1] // remove last ","
query := `UPDATE ... WHERE id IN (` + paramrefs + `)`
pool.Exec(query, ids...)
或者,您可以使用ANY而不是IN。
ids := &pgtype.Int4Array{}
ids.Set([]int{1,2,3,4})
query := `UPDATE ... WHERE id = ANY ($1)`
pool.Exec(query, ids)
(這里你可能必須將參數引用轉換為適當的數組類型,我不確定,試試不轉換,如果不行,嘗試轉換)
- 2 回答
- 0 關注
- 144 瀏覽
添加回答
舉報