2016-05-14 100 views
0

我有我的网站,它可以写点东西。然后我的服务可以获取这些数据并保存在我的数据库中,但它不适用于我。我尝试了一些步骤,似乎可以传输字符串到DAB(),但它不能在我的数据库中保存任何东西。数据无法保存在我的数据库中

错误日志:

2016/05/14 08:02:08 http: panic serving 14.146.246.141:64540: sql: converting argument #0's type: unsupported type 
[]string, a slice 
goroutine 5 [running]: 
net/http.(*conn).serve.func1(0xc8200b4f20, 0x7f8b9f86c6c8, 0xc820024038) 
    /usr/lib/golang/src/net/http/server.go:1287 +0xb5 
main.checkErr(0x7f8b9f867028, 0xc82000b4a0) 
    /home/Mario/a.go:50 +0x4b 
main.dab(0xc82000b360, 0x1, 0x1, 0xc82000b370, 0x1, 0x1) 
    /home/Mario/a.go:41 +0x306 
main.handle(0x7f8b9f86c848, 0xc8200b5550, 0xc8200de2a0) 
    /home/Mario/a.go:28 +0x4a7 
net/http.HandlerFunc.ServeHTTP(0x876a90, 0x7f8b9f86c848, 0xc8200b5550, 0xc8200de2a0) 
    /usr/lib/golang/src/net/http/server.go:1422 +0x3a 
net/http.(*ServeMux).ServeHTTP(0xc820012930, 0x7f8b9f86c848, 0xc8200b5550, 0xc8200de2a0) 
    /usr/lib/golang/src/net/http/server.go:1699 +0x17d 
net/http.serverHandler.ServeHTTP(0xc820016120, 0x7f8b9f86c848, 0xc8200b5550, 0xc8200de2a0) 
    /usr/lib/golang/src/net/http/server.go:1862 +0x19e 
net/http.(*conn).serve(0xc8200b4f20) 
    /usr/lib/golang/src/net/http/server.go:1361 +0xbee 
created by net/http.(*Server).Serve 
    /usr/lib/golang/src/net/http/server.go:1910 +0x3f6 

代码片段:

package main 

import (
    "net/http" 
    "log" 
    "fmt" 
    "html/template" 
    _ "github.com/go-sql-driver/mysql" 
    "database/sql" 
) 

func Mai(w http.ResponseWriter, r *http.Request){ 
     t, _ := template.ParseFiles("a.js") 
     t.Execute(w, nil) 
} 

func FormServer(w http.ResponseWriter, r *http.Request){ 
     t, _ := template.ParseFiles("an.html") 
     t.Execute(w, nil) 
} 

func handle(w http.ResponseWriter, r *http.Request){ 
     r.ParseForm() 
     fmt.Println("title:", r.Form["title"]) 
     fmt.Println("main:", r.Form["main"]) 
     a := r.Form["title"] 
     b := r.Form["main"] 
     dab(a , b) 
     // t, _ := template.ParseFiles("finish.html") 
     // t.Execute(w, nil) 
} 

func dab(a , b []string){ 
    db, err := sql.Open("mysql", "root:[email protected]/xiaoyou?charset=utf8") 
    checkErr(err) 
    stmt, err := db.Prepare("INSERT talk SET title=?,main=?") 
    checkErr(err) 
    res, err := stmt.Exec(a , b) 
    checkErr(err) 
    id, err := res.LastInsertId() 
    checkErr(err) 
    fmt.Println(id) 
    db.Close() 
} 

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

func main() { 
    http.HandleFunc("/",Mai) 
    http.HandleFunc("/login", FormServer) 
    http.HandleFunc("/submit",handle) 
    err := http.ListenAndServe(":80", nil) 
    if err != nil { 
     log.Fatal("ListenAndServe:",err) 
    } 
} 

我怎样才能解决呢?

+0

打开后,做一个ping来检查数据库是否连接:err:= db.Ping() – Fantasim

回答

0

您正在将一部分字符串传递给某些不处理它的东西。尝试使用r.Form.Get代替titlemain,然后将其传递给您的预准备语句。

+0

thanks.it可以为我工作! –