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

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

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

Go
不负相思意 2023-01-03 16:16:54
我试图运行下面的代码段并不断抛出以下错误QueryRowContextsql: 应有 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 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}这里似乎出了什么问题?提前致谢。
查看完整描述

1 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

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 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

}

将查询中的@Email 替换为 ? 并将电子邮件传递到 QueryRowContext not named statement


查看完整回答
反对 回复 2023-01-03
  • 1 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

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