2 回答

TA貢獻1856條經(jīng)驗 獲得超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條經(jīng)驗 獲得超5個贊
如您所知,IN需要一個標(biāo)量表達式列表,而不是數(shù)組,但是pgtype.Int4Array表示一個數(shù)組,而不是標(biāo)量表達式列表。
“IMO 雖然這有點容易出錯,因為你必須自己處理轉(zhuǎn)義/sql 注入等?!?/p>
不一定,您可以遍歷您的數(shù)組,構(gòu)造一個參數(shù)引用字符串,將其連接到查詢,然后執(zhí)行它傳遞數(shù)組與....
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)
(這里你可能必須將參數(shù)引用轉(zhuǎn)換為適當(dāng)?shù)臄?shù)組類型,我不確定,試試不轉(zhuǎn)換,如果不行,嘗試轉(zhuǎn)換)
- 2 回答
- 0 關(guān)注
- 140 瀏覽
添加回答
舉報