使用 GORM 批次插入的陣列介面
將多筆記錄插入資料庫通常需要建構複雜的 SQL 查詢。 GORM 簡化了這個過程,但了解如何使用陣列介面正確傳遞多個值非常重要。
考慮以下程式碼:
vals := append(vals, "XX1", "Jakarta") vals = append(vals, "XX2", "Bandung") tx.Exec(sqlStr, vals)
此程式碼將導致下列錯誤:
Error 1136: Column count doesn't match value count at row 1
這是因為查詢需要四個值(code、name、code、 name),但是數組介面vals 是作為單一參數而不是單一元素傳遞。
要解決此問題,我們需要使用「...」運算子來「解包」數組介面並單獨傳遞每個元素:
tx.Exec(sqlStr, vals...)
tx.Exec() 的簽名是:
func (tx *Tx) Exec(query string, args ...interface{}) (Result, error)
所以,我們需要將vals 作為vals傳遞......下面是更正後的程式碼:
res, err := tx.Exec(sqlStr, vals...)
現在,查詢將被正確執行,產生所需的SQL 語句:
INSERT INTO city(code, name) VALUES ('XX1', 'Jakarta'),('XX2', 'Bandung')
執行後記得檢查傳回的錯誤(err)查詢。
以上是如何透過 GORM 的 `tx.Exec()` 正確使用陣列介面進行批次插入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!