【问题标题】:go convert empty interface to stringgo 将空接口转换为字符串
【发布时间】:2013-02-21 08:55:50
【问题描述】:

我正在使用 mymysql 包,我正在尝试创建一个获取 SQL 查询和一些参数的函数(作为可变参数空接口):

func FindByQuery(statement string, params ...interface{}) (diver *DiverT, err error) {
    values := make([]interface{}, len(params))
    for i := range params {
            values[i] = params[i]
    }

    // Both statements result in the same error...
    row, _, execError := Db.QueryFirst(statement,values...)

    row, _, execError := Db.QueryFirst(statement,params...)

    // Additional code...
}

当我使用某种 SQL 调用此方法时,总是会收到 SQL 错误。我会这样做:

FindByQuery("SELECT * FROM Diver WHERE Name=?", "Markus")

这会导致以下错误:

收到来自 MySQL 服务器的 #1064 错误:“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,了解在 '?%!(EXTRA string=Markus)' 附近使用的正确语法第 1 行"

我应该怎么做才能将参数正确转换为字符串(或其他字符串,如果我有不同的参数)?

【问题讨论】:

  • 查看github.com/ziutek/mymysql,它似乎使用 printf 样式格式字符将值插入查询而不是问号。这可能是您的问题的原因吗?
  • 完美,谢谢。非常有趣的是 mymysql 文档使用问号(并且问号与整数参数一起使用)。
  • 问号用于准备好的语句。例如,请参阅:github.com/ziutek/mymysql/blob/master/examples/prepared_stmt.go
  • 感谢您的澄清。
  • @comsubvie,建议回答您的问题,因为我相信其他人会需要它

标签: mysql go type-conversion


【解决方案1】:

尝试使用 printf 格式语法:

FindByQuery("SELECT * FROM Diver WHERE Name=%s", "Markus")

【讨论】:

    猜你喜欢
    • 2015-02-25
    • 2019-04-29
    • 2012-10-11
    • 2018-01-15
    • 1970-01-01
    • 2012-08-02
    • 2016-02-28
    • 2016-05-25
    • 2017-06-14
    相关资源
    最近更新 更多