【问题标题】:Golang sql named parameter queryGolang sql命名参数查询
【发布时间】:2020-04-29 02:06:40
【问题描述】:

我正在尝试在golang中使用命名参数查询如下:

stmt, err := db.Prepare("insert into users(name, email) values(@name, @email)")
if err != nil {
    //error handling
}

res, err := stmt.Exec(sql.Named("name", name), sql.Named("email", email))

if err != nil {
        //error: sql: expected 0 arguments, got 2 
}

我收到以下错误:“sql: expected 0 arguments, got 2”。

编写此查询的正确方法是什么?

【问题讨论】:

  • 你使用什么库来访问 MySQL ?无论如何,命名参数通常写成: ... values(:name, :email)") @variable - 它是变量,不是命名参数
  • github.com/go-sql-driver/mysql
  • 使用 :name, :email 会出现 SQL 语法错误。
  • 你可以试试不带 Prepare 块的 db.Exec("INSERT INTO users(name, email) VALUES(?, ?)", name, email)
  • 你使用的是什么版本的 Go?我的理解是,对 sql.Named 的支持是 Go 1.8 中的新增功能。

标签: mysql go


【解决方案1】:

Go 需要支持每一种 SQL 服务器 - 并不是所有的 SQL 服务器都支持命名参数。支持它们的服务器有各种怪癖和“陷阱”。但是它们都支持位置参数就好了。

但是 mysql-driver 存在一个未解决的问题: https://github.com/go-sql-driver/mysql/issues/561

【讨论】:

    猜你喜欢
    • 2017-09-27
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 2021-12-13
    • 2020-04-27
    相关资源
    最近更新 更多