lib / pq

Pure Go Postgres driver for database/sql
https://pkg.go.dev/github.com/lib/pq
MIT License
8.86k stars 908 forks source link

pq: invalid input syntax for type integer #1157

Open Ghada-Emad1 opened 2 months ago

Ghada-Emad1 commented 2 months ago
func (m *SnippetModel) Insert(title string, content string, expires int) (int, error) {
    var pk int
    err := m.DB.QueryRow(`INSERT INTO snippets VALUES($1,$2,$3) RETURNING id`, title, content, expires).Scan(&pk)
    if err != nil {
        return 0, err
    }

    return pk, nil
}

i want to return last index has been inserted into db

func (app *Application) snippetCreate(w http.ResponseWriter, r *http.Request) {
    if r.Method != http.MethodPost {
        w.Header().Set("Allow", "Post")
        app.ClientError(w, http.StatusMethodNotAllowed)
        return
    }

    title := "O snail"
    content := "O snail\nClimb Mount Fuji,\nBut slowly, slowly!\n\n– Kobayashi Issa"
    expires := 7

    id, err := app.snippets.Insert(title, content, expires)
    if err != nil {
        app.ServeError(w, err)
        return
    }

    // Redirect the user to the relevant page for the snippet.
    http.Redirect(w, r, fmt.Sprintf("/snippet/view?id=%d", id), http.StatusSeeOther)
}

but it always gives me that error

iwanofski commented 2 months ago

Your INSERT query needs columns. Try updating 2nd line in Insert func to:

err := m.DB.QueryRow(`INSERT INTO snippets (title, content, expires) VALUES ($1,$2,$3) RETURNING id`, title, content, expires).Scan(&pk)
Ghada-Emad1 commented 2 months ago

thanks for your response ,i finally solved that dummy error