【问题标题】:Golang mysql server version for the right syntax to use near ',)' at line 1 [closed]Golang mysql服务器版本,在第1行的',)'附近使用正确的语法[关闭]
【发布时间】:2021-05-30 12:28:45
【问题描述】:

错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ',)' 附近使用正确的语法

type nameses struct {
    Name    string
    Surname string
}

var name nameses


insert, err := db.Query("INSERT INTO register(`name`,`surname`) VALUES(" + name.Name + "," + name.Surname + ")")

我很好地连接了 golang 上的数据库,但我找不到语法错误。现在感谢您的帮助。

【问题讨论】:

  • 看起来 name.Namename.Surname 是空字符串。

标签: mysql go


【解决方案1】:

您在姓名和姓氏周围缺少单引号,因为它们是字符串

insert, err := db.Query("INSERT INTO register(`name`,`surname`) VALUES('" + name.Name + "','" + name.Surname + "')")

但是你应该紧急切换到准备好的语句

stmt, err := tx.Prepare("INSERT INTO register(`name`,`surname`) VALUES (?,?)")
if err != nil {
    log.Fatal(err)
}
defer stmt.Close() // prepare statement failed and mus be checked!

_, err = stmt.Exec(name.Name,name.Surname)
if err != nil {
    log.Fatal(err)
}
}

err = tx.Commit()
if err != nil {
    log.Fatal(err)
}

【讨论】:

  • “危险!”是什么意思?在stmt.Close()之后?
  • 当准备好的语句失败时,是非常错误的,必须被阻止。也许注意力出了问题,是一个更好的术语
  • 你的意思是把评论放在log.Fatal()之后吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-01
  • 2013-05-12
  • 2017-04-29
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多