猿问

Golang SQL 预期 0 个参数得到 1

我正在使用以下查询来查询数据库。但我得到了错误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()

}


炎炎设计
浏览 906回答 2
2回答

莫回无

您的代码不起作用的原因是因为您使用的是格式化的字符串语法,但没有格式化它。没有参数的原因可能是因为没有使用正确的占位符。尝试将查询包装在格式化程序中,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)

12345678_0001

正如该线程中所建议的,您基本上需要在or函数?中用作占位符。所以,上面的查询应该是这样的:QueryQueryRowrow := DB.QueryRow(`SELECT COUNT(*) FROM Users WHERE Id = ? ;`, userID)if err != nil {    return err.Error()}
随时随地看视频慕课网APP

相关分类

Go
我要回答