2015-04-22 105 views
-1

看起來很簡單,但無法實現。 當瀏覽domain.com/post/1時,它應顯示來自行id的數據,其值爲1如何在SQL查詢中將URI附加爲字符串

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() 
} 
+0

當你說不工作你是什麼意思?它不是在sql中找到行嗎? –

+0

我總是得不到它,並給出錯誤。嘗試過不同的方式。我只是不知道 – apasajja

+0

我忘記了有關參數。 – apasajja

回答

1

您的問題的部分原因是,你使用的字符串作爲params["idnumber"] SQL查詢的一部分

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

那會看對於id等於params["idnumber"]字符串的書。

你需要做的是根據http://golang.org/pkg/database/sql/#DB.Query

在這種情況下使用佔位符和參數查詢應該是

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

這應該解決,我認爲您遇到的問題。然而,直到你實際上更新你的問題與你遇到的實際問題,我不會知道。

更新

你與undefined: params得到的錯誤是因爲你沒有在範圍params對象。

我建議閱讀馬丁尼如何工作的方式獲取參數的路線。 https://github.com/go-martini/martini#routing

+0

第27行出現錯誤:undefined:params – apasajja

+0

我忘了添加'params martini.Params'。您的代碼現在可用。謝謝 – apasajja

1

我認爲問題在於您在字符串文字查詢中使用了變量名稱,而您希望它的值存在。

試着改變它;

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

to;

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

你可能還有其他問題,但鑑於你沒有正確形成查詢我不希望你找回你想要的結果。

+0

也有像萊奧科雷亞答案的錯誤。第27行的錯誤:undefined:params – apasajja

+0

@apasajja是的,好吧,你只是在沒有聲明任何地方的情況下使用參數。什麼是'm'?您正在查找請求url.Values,它是關鍵值對的字典,您需要在將其傳遞到您的查詢之前將其放入所需的字符串格式。 – evanmcdonnal

+0

是的。我忘了添加'params martini.Params'。不幸的是,您的代碼在添加params聲明後不起作用,而Leo Correa代碼正常工作。 'm'是馬丁尼。是的,將URI附加爲部分數據庫查詢(SQL)。 – apasajja

相關問題