登录
首页 >  Golang >  Go问答

调用存储过程在 GoLang 中使用 QueryRowContent

来源:stackoverflow

时间:2024-03-13 09:27:27 333浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《调用存储过程在 GoLang 中使用 QueryRowContent》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

我尝试运行下面的代码段,并不断从 queryrowcontext 抛出以下错误

sql:预期 0 个参数,得到 2 个

此方法适用于普通 sql 查询,当我尝试使用 call 关键字调用 query 参数的存储产品时,我不断遇到问题。

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
}

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


正确答案


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 未命名语句

理论要掌握,实操不能落!以上关于《调用存储过程在 GoLang 中使用 QueryRowContent》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>