2 回答

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊
從您收到的錯(cuò)誤中:
expected 2 arguments, got 3
我懷疑$3
在 SQL 引號(hào)內(nèi)的查詢(xún)中不會(huì)被解釋為參數(shù)。另外據(jù)我所知,這不是在 postgres 中使用參數(shù)間隔的正確方法。正確的方法是寫(xiě)interval '1 day' * $1
所以我認(rèn)為如果您將代碼更改為:
stmt := `INSERT INTO widgets (title, content, created, expires) VALUES($1, $2, NOW(), NOW() + INTERVAL '1 day' * $3) RETURNING id;`
它會(huì)起作用的。但請(qǐng)確保將expires
參數(shù)更改為 int 類(lèi)型。

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
'$3 day' 您不能將查詢(xún)參數(shù)作為字符串文字的一部分傳遞。
嘗試將所有INTERVAL '$3 day'部分替換為參數(shù)。像這個(gè)。
func (m *WidgetModel) Insert(title, content, expires string) (int, error) {
stmt := `
INSERT INTO widgets (title, content, created, expires)
VALUES ($1, $2, NOW(), NOW() + $3)
RETURNING id;`
var id int
expiresDays, err := strconv.ParseInt(expires, 10, 32)
if err != nil {
return 0, err
}
expiresInterval := pgtype.Interval{
Days: int32(expiresDays),
Status: pgtype.Present}
err = m.DB.QueryRow(context.Background(), stmt, title, content,
expiresInterval).Scan(&id)
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
return 0, models.ErrNoRecord
} else {
return 0, err
}
}
return 0, nil
}
- 2 回答
- 0 關(guān)注
- 215 瀏覽
添加回答
舉報(bào)