golang mysql exec占位符“?”没有扩大

时间:2016-03-03 19:43:05

标签: mysql go

我觉得我必须完全忽视这一点。 我尝试按照下面的示例运行某些内容,但?未扩展到传入的参数中。

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

db, err := sql.Open(...)
if err != nil { ... }
_, err = db.Query("SELECT * FROM foo WHERE bar=?", bar)

另外,谁担心扩大它?它显示在database/sql的{​​{3}},但其他对话暗示可能是司机关注的问题。

我错过了什么?非常感谢任何正确方向的指针。

1 个答案:

答案 0 :(得分:0)

你(可能)没有告诉它使用mysql驱动程序;

db, err := sql.Open("mysql", connString)

以下是我的一些示例代码:

var query = "INSERT IGNORE INTO blah (`col1`, `col2`, `col3`) VALUES (?, ?, ?)"

r, err := db.Query(query, some_data_1, some_data_2, some_data_3)

// Failure when trying to store data
if err != nil {
    msg := fmt.Sprintf("fail : %s", err.Error())
    fmt.Println(msg)

    return err
}

r.Close() // Always do this or you will leak connections

我创建了MySQL池(是的,它是一个池一个连接):

import (
    // mysql driver
    _ "github.com/go-sql-driver/mysql"

    "database/sql"
    "fmt"
)

connString := fmt.Sprintf("%s:%s@(%s:%d)/%s?timeout=30s",
    user,
    password,
    host,
    port,
    database,
)

db, err := sql.Open("mysql", connString)

if err != nil {
    return nil, err
}

err = db.Ping() // test the pool connection(s)

if err != nil {
    return nil, err
}

return db, nil // No error, return the pool connections

我还强烈建议您打印出数据库连接过程和查询过程中的任何错误。可能是您正在使用驱动程序,但您缺少权限,数据库已关闭等等。