使用golang执行不同的mysql查询

oxcyiej7  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(404)

我使用的是Go1.9,它没有规定我使用以下语法

func main() {
dsn := DB_USER + ":" + DB_PASS + "@" + DB_HOST + "/" + DB_NAME + "?charset=utf8"
db, err := sql.Open("mysql", dsn)
if err != nil {
    log.Fatal(err)
}
defer db.Close()

q := "call regWorker('Thuto', 'Deere4454de', 'fueqx@mdj4f.com', '8725554675364', '94874256443', @outarg)"

_, err = db.Exec(q)
if err != nil {
    log.Fatal(err)
}'

我发现奇怪的是它实际上注册了工人?我的问题是我需要@outarg值,但我不能100%确定如何检索它。我想重写这段代码,使之与这里解释的go-sql保持一致https://golang.org/pkg/database/sql/#out
我试着搜索,如果之前有人解释过,我很谦虚地道歉。
编辑:我是新来的

9jyewag0

9jyewag01#

不幸的是,至少是mysql驱动程序 go-sql-driver/mysql ,不支持 Out 参数。但是您仍然可以使用mysql session变量来检索out参数的值。
不过,您需要启用多语句支持才能工作

dsn := fmt.Sprintf(
    "%s:%s@%s/%s?charset=utf8&multiStatements=true", // <-- add this
    DB_USER, DB_PASS, DB_HOST, DB_NAME,
)

然后

// initialize @out to ensure we're not getting a previous value
q := "SET @out=NULL"
// execute our SP
q += fmt.Sprintf(
    ";CALL regWorker('%s', '%s', '%s', '%s', '%s', @out)",
    "Thuto", "Deere4454de", "fueqx@mdj4f.com", "8725554675364", "94874256443",
)
// return the resultset containing the value of the out parameter
q += ";SELECT COALESCE(@out, 0)"

var out int
db.QueryRow(q).Scan(&out)

在这个例子中,我假设 out 参数的类型为 int . 根据您的要求进行适当调整。
注意:不幸的是,在这种情况下,您不能使用准备好的语句;因此,需要对参数值进行适当的清理和转义,以防止sql注入。

相关问题