hdr*_*ven 2 sql postgresql templates go
我试图通过这种方式获取数据库的值。但是当我转到 /myapps 方向时,编译器会抛出一个错误。
结构:
type App struct{
Title string
Author string
Description string
}
Run Code Online (Sandbox Code Playgroud)
功能:
func myappsHandler(w http.ResponseWriter, r *http.Request){
db, err := sql.Open("postgres"," user=postgres dbname=lesson4 host=localhost password=1234 sslmode=disable")
if err != nil{
log.Fatal(err)
}
rows, err := db.Query(`SELECT title, author, description FROM apps
WHERE title ILIKE $1
OR author ILIKE $1
OR description ILIKE $1`)
defer rows.Close()
if err != nil{
log.Fatal(err)
}
apps := []App{}
for rows.Next(){
b := App{}
err := rows.Scan(&b.Title, &b.Author, &b.Description)
if err != nil{
log.Fatal(err)
}
apps = append(apps, b)
}
render(w, "myapps.html", map[string]interface{}{"apps" : apps})
db.Close()
}
Run Code Online (Sandbox Code Playgroud)
我在 HTML 中是这样读的:
{{ range .apps}}
<tr>
<td>{{ .Title }}</td>
<td>{{ .Author }}</td>
<td>{{ .Description }}</td>
<td> <form action="/delete">
<p class="navbar-form navbar-right"><button type="submit" class="btn btn-danger">Borrar</button> </p>
</form></td>
</tr>
{{ end }}
Run Code Online (Sandbox Code Playgroud)
错误是:没有参数 $1。
先感谢您。
你需要传递参数
title := '%the title%'
author := '%John%'
description := '%a book%'
rows, err := db.Query(`
SELECT title, author, description
FROM apps
WHERE title ILIKE $1
OR author ILIKE $2
OR description ILIKE $3`
, title, author, description
)
Run Code Online (Sandbox Code Playgroud)
http://golang.org/pkg/database/sql/#DB.Query
使用%字符表示匹配任何内容
http://www.postgresql.org/docs/current/static/functions-matching.html#FUNCTIONS-LIKE