将变量传递给GoLang查询

via*_*ath 6 mysql go

首先让我说我是一个初学者(几天前开始)与golang,我正在学习如何实际应用该语言.我的目标是构建一个Web Rest API,用于查询数据库并将数据提供给用户.

我已经能够成功地创建使用马提尼(一个简单的API https://github.com/go-martini/martini),并连接到使用MySQL数据库https://github.com/go-sql-driver/mysql.我目前的问题是如何将API请求中的变量param传递给我的查询.这是我目前的代码:

package main

import (
    "github.com/go-martini/martini"
    _ "github.com/go-sql-driver/mysql"
    "database/sql"
    "fmt"
)

func main() {

  db, err := sql.Open("mysql",
    "root:root@tcp(localhost:8889)/test")

  m := martini.Classic()

  var str string

  m.Get("/hello/:user", func(params martini.Params) string {

  var userId = params["user"] 

  err = db.QueryRow(
      "select name from users where id = userId").Scan(&str)

  if err != nil && err != sql.ErrNoRows {
    fmt.Println(err)
  }

  return "Hello " + str

  })

  m.Run()


  defer db.Close()  

}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我的目标是获取输入变量(user)并将其插入到名为userId的变量中.然后我想根据该变量查询数据库以获取名称.一旦完成所有工作,我想回复用户的名字.

有人可以帮忙吗?当我继续学习Go之旅时,我将非常感激!

Dre*_*eur 9

我没有用它,但看着文档,这就是你追求的吗?

db.QueryRow("SELECT name FROM users WHERE id=?", userId)
Run Code Online (Sandbox Code Playgroud)

我认为它应该以sql安全的方式替换?with userId.

http://golang.org/pkg/database/sql/#DB.Query

  • 正确.`?`是mySQL使用的参数格式,`$ 1,$ 2等`是PostgreSQL格式.OP应该**永远**(永远!)使用除参数化以外的任何东西,否则它们会受到SQL注入攻击. (5认同)