猿问

golang mysql exec占位符“?” 未展开

我觉得我一定是完全没有抓住重点。我尝试按照下面的示例运行一些东西,但?没有扩展到传入的参数中。


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但其他对话暗示这可能是司机的担忧。


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


凤凰求蛊
浏览 182回答 1
1回答

翻翻过去那场雪

您(可能)没有告诉它使用 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 dataif 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我也强烈建议您打印出数据库连接过程和查询过程中的任何错误。可能是您正在使用驱动程序,但您没有权限,数据库已关闭等。
随时随地看视频慕课网APP

相关分类

Go
我要回答