使用 QueryRowContent 在 Go 语言中调用存储过程

我试图运行下面的代码段并不断抛出以下错误QueryRowContext


sql: 应有 0 个参数,得到 2 个


这种方法适用于纯 SQL 查询,当我尝试使用关键字将存储产品调用到query参数时,我不断遇到问题CALL。


import (

"database/sql"

"net/http"

)


func VerifyUser(user User) (*User, string, error) {

  db, ctx := db.GetDB()

  query := "CALL usp_GetUserByUsername(@Email)"


stmt, err := db.Prepare(query)

if err != nil {

    log.Errorln("Error in preparing statement. " + err.Error())

    return nil, "Error in preparing statement.", err

}

defer stmt.Close()


row := stmt.QueryRowContext(ctx, sql.Named("Email", user.Email))


var retUser User

err = row.Scan(&retUser.ID, &retUser.Email, &retUser.Password, &retUser.Status)

if err != nil {

    log.Warningln("Unknown Email: " + user.Email + ". " + err.Error())

    return nil, "Invalid user.", err

}

这里似乎出了什么问题?提前致谢。


不负相思意
浏览 144回答 1
1回答

子衿沉夜

import ("database/sql""net/http")func VerifyUser(user User) (*User, string, error) {  db, ctx := db.GetDB()  query := "CALL usp_GetUserByUsername(?)"stmt, err := db.Prepare(query)if err != nil {    log.Errorln("Error in preparing statement. " + err.Error())    return nil, "Error in preparing statement.", err}defer stmt.Close()row := stmt.QueryRowContext(ctx, user.Email)var retUser Usererr = row.Scan(&retUser.ID, &retUser.Email, &retUser.Password, &retUser.Status)if err != nil {    log.Warningln("Unknown Email: " + user.Email + ". " + err.Error())    return nil, "Invalid user.", err}将查询中的@Email 替换为 ? 并将电子邮件传递到 QueryRowContext not named statement
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go