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

Golang SQL 预期 0 个参数得到 1

Golang SQL 预期 0 个参数得到 1

Go
炎炎设计 2022-06-21 15:59:09
我正在使用以下查询来查询数据库。但我得到了错误sql: expected 0 arguments, got 1。以下是我正在使用的代码:row := DB.QueryRow(`SELECT COUNT(*) FROM Users WHERE Id = "%s";`, userID)if err != nil {    return err.Error()}我正在使用以下软件包和驱动程序import (    "database/sql"    _ "github.com/go-sql-driver/mysql")编辑:我也尝试了以下查询,但我得到了同样的错误。row := DB.QueryRow(`SELECT COUNT(*) FROM Users WHERE Id = "$1";`, userID)if err != nil {    return err.Error()}
查看完整描述

2 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

您的代码不起作用的原因是因为您使用的是格式化的字符串语法,但没有格式化它。没有参数的原因可能是因为没有使用正确的占位符。尝试将查询包装在格式化程序中,fmt.Sprintf例如:


query := fmt.Sprintf(`SELECT COUNT(*) FROM Users WHERE Id = '%s'`, userID)

row := DB.QueryRow(query)

if err != nil {

    return err.Error()

}

你也可以避免fmt.Sprintf。相反,您可以遵循更特定于您正在使用的驱动程序的格式。例如


// For "github.com/go-sql-driver/mysql"

row := DB.QueryRow("SELECT COUNT(*) FROM Users WHERE Id=?", userID)


// For "github.com/mattn/go-sqlite3"

row := DB.QueryRow("SELECT COUNT(*) FROM Users WHERE Id=?", userID)


// For "github.com/lib/pq"

row := DB.QueryRow("SELECT COUNT(*) FROM Users WHERE Id=$1", userID)


查看完整回答
反对 回复 2022-06-21
?
12345678_0001

TA贡献1802条经验 获得超5个赞

正如该线程中所建议的,您基本上需要在or函数?中用作占位符。所以,上面的查询应该是这样的:QueryQueryRow


row := DB.QueryRow(`SELECT COUNT(*) FROM Users WHERE Id = ? ;`, userID)

if err != nil {

    return err.Error()

}


查看完整回答
反对 回复 2022-06-21
  • 2 回答
  • 0 关注
  • 794 浏览
慕课专栏
更多

添加回答

举报

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