-1

簡単に見えますが、私はそれを実現することができません。ブラウジング時に、どの値domain.com/post/1の行のデータを表示する必要があります。id1

idは整数 ( int4) です。

動作していないコードの下:

package main

import "fmt"
import "github.com/go-martini/martini"
import "net/http"
import "database/sql"
import _ "github.com/lib/pq"

func SetupDB() *sql.DB {
  db, err := sql.Open("postgres", "user=postgres password=apassword dbname=lesson4 sslmode=disable")
  PanicIf(err)
  return db
}

func PanicIf(err error) {
  if err != nil {
    panic(err)
  }
}

func main() {
  m := martini.Classic()
  m.Map(SetupDB())

  m.Get("/post/:idnumber", func(rw http.ResponseWriter, r *http.Request, db *sql.DB) {

    rows, err := db.Query(`SELECT title, author, description FROM books WHERE id = params["idnumber"]`)
    PanicIf(err)
    defer rows.Close()

    var title, author, description string
    for rows.Next() {
      err:= rows.Scan(&title, &author, &description)
      PanicIf(err)
      fmt.Fprintf(rw, "Title: %s\nAuthor: %s\nDescription: %s\n\n",
        title, author, description)
    }

  })

  m.Run()
}
4

2 に答える 2

1

問題は、文字列リテラルクエリで変数名を使用していることだと思います。代わりにその値が必要です。

これを変更してみてください。

rows, err := db.Query(`SELECT title, author, description FROM books WHERE id = params["idnumber"]`)

に;

rows, err := db.Query("SELECT title, author, description FROM books WHERE id =$1", params["idnumber"])

それ以外にも他の問題が発生する可能性がありますが、クエリを正しく作成していないことを考えると、必要な結果が得られるとは思えません。

于 2015-04-22T17:01:23.750 に答える