我正在尝试使用Go执行查询,但是我无法设法请求任何查询,因为它不断给我同样的错误。
我多次更改了查询,但这似乎无济于事。 我也更改了Query中的QueryRow,不幸的是,这也无济于事。
func test123() {
db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/vitaintellectdb")
if err != nil {
panic(err.Error())
}
id := 1
var col string
sqlStatement := `SELECT naam FROM medewerker WHERE naam="jansen"`
row := db.QueryRow(sqlStatement, id)
err2 := row.Scan(&col)
if err2 != nil {
if err2 == sql.ErrNoRows {
fmt.Println("Zero rows found")
} else {
panic(err2)
}
}
}
QueryRow旨在为您提供1行作为回报。不幸的是,该错误告诉我应该没有退货,我希望退回1行。
答案 0 :(得分:2)
sqlStatement := `SELECT naam FROM medewerker WHERE naam="jansen"`
row := db.QueryRow(sqlStatement, id)
给定的sql语句没有参数。以下sql语句(包括占位符)可能会更好。
sqlStatement := `SELECT naam FROM medewerker WHERE medewerkernummer =?`
row := db.QueryRow(sqlStatement, id)
根据id
列的命名方式,您可能必须将naam=?
更改为idColumn=?
。在示例here中,您可能会找到灵感。
答案 1 :(得分:1)
该错误告诉您您正在向QueryRow
传递参数,这是不期望的。
您的SQL语句没有任何占位符,因此不会有任何占位符,但是您将其赋予id
之一。只需更改:
row := db.QueryRow(sqlStatement, id)
收件人:
row := db.QueryRow(sqlStatement)
答案 2 :(得分:-2)
您可以使用 fmt.Sprintf
在一行中非常干净地完成此操作。
...
row := db.QueryRow(fmt.Sprintf("SELECT naam FROM medewerker WHERE naam='%s', id)
...