我是 Go 的新手。
我正在尝试将 MySQL 与 Go 一起使用。
我已经安装了具有 Apache 和 MySQL 的 XAMPP。
我也在使用 database/sql
包和 github.com/go-sql-driver/mysql
驱动程序。
我无法找出错误。我正在使用 LiteIDE,它没有显示任何错误,但记录没有插入到我的数据库中。
我的代码是:
// RESTAPI project main.go
package main
import (
"database/sql"
"encoding/json"
"fmt"
"log"
"net/http"
_ "github.com/go-sql-driver/mysql"
"github.com/gorilla/mux"
)
type API struct {
Message string "json:message"
}
type User struct {
ID int "json:id"
Name string "json:username"
Email string "json:email"
First string "json:first"
Last string "json:last"
}
func CreateUser(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln("Create file")
NewUser := User{}
NewUser.Name = r.FormValue("user")
NewUser.Email = r.FormValue("email")
NewUser.First = r.FormValue("first")
NewUser.Last = r.FormValue("last")
output, err := json.Marshal(NewUser)
fmt.Println(string(output))
if err != nil {
fmt.Println("Something went wrong!")
}
dsn := "root:password@/dbname"
db, err := sql.Open("mysql", dsn)
sql := "INSERT INTO users set user_nickname='" + NewUser.Name + "', user_first='" + NewUser.First + "', user_last='" + NewUser.Last + "', user_email='" + NewUser.Email + "'"
q, err := db.Exec(sql)
if err != nil {
log.Fatal(err)
}
fmt.Println(q)
fmt.Println("User is created")
}
func main() {
routes := mux.NewRouter()
routes.HandleFunc("/api/user/create", CreateUser).Methods("GET")
http.ListenAndServe(":8080", nil)
}
最佳答案
正如 Tom 提到的,您应该在 sql.Open 之后检查错误:
db, err := sql.Open("mysql", dsn)
if err != nil {
log.Fatal(err)
}
附言。切勿在 SQL 中使用字符串连接。
要防止 SQL 注入(inject),您应该使用准备好的语句:
sql := "INSERT INTO users set user_nickname='?', user_first='?', user_last='?', user_email='?'"
q, err := db.Exec(sql, NewUser.Name, NewUser.First, NewUser.Last, NewUser.Email)
关于mysql - 无法连接到 XAMPP MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30750032/