为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
凤凰求蛊 2021-12-20 14:36:27
我觉得我一定是完全没有抓住重点。我尝试按照下面的示例运行一些东西,但?没有扩展到传入的参数中。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但其他对话暗示这可能是司机的担忧。我错过了什么?非常感谢任何指向正确方向的指针。
查看完整描述

1 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

您(可能)没有告诉它使用 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

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


查看完整回答
反对 回复 2021-12-20
  • 1 回答
  • 0 关注
  • 181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信