gpt4 book ai didi

sql - "sql: no rows in result set"

转载 作者:行者123 更新时间:2023-11-29 13:45:33 29 4
gpt4 key购买 nike

我正在处理通过 HTML 表单发布到我的 Go 后端的用户身份验证数据。我正在构建 some boilerplate更好地学习围棋。

我的问题是以下 func 返回的内容:

func (ctrl UserController) Signin(c *gin.Context) {

var signinForm forms.SigninForm
user, err := userModel.Signin(signinForm)

if err := c.ShouldBindWith(&signinForm, binding.Form); err != nil {
c.JSON(406, gin.H{"message": "Invalid signin form", "form": signinForm})
c.Abort()
return
}

if err == nil {
session := sessions.Default(c)
session.Set("user_id", user.ID)
session.Set("user_email", user.Email)
session.Set("user_name", user.Name)
session.Save()

c.JSON(200, gin.H{"message": "User signed in", "user": user})
} else {
c.JSON(406, gin.H{"message": "Invalid signin details", "error": err.Error()})
}

}

第一个 if 语句验证输入,并且工作正常(如果电子邮件格式不正确则出错,如果正确则没有错误)。但是,如果正确验证了输入,则会触发第二个语句的 else 子句,并返回以下 JSON:

{
error: "sql: no rows in result set",
message: "Invalid signin details"
}

在我的 User 模型中也发布相关代码可能很有用:

//User ...
type User struct {
ID int `db:"id, primarykey, autoincrement" json:"id"`
Email string `db:"email" json:"email"`
Password string `db:"password" json:"-"`
Name string `db:"name" json:"name"`
UpdatedAt int64 `db:"updated_at" json:"updated_at"`
CreatedAt int64 `db:"created_at" json:"created_at"`
}

//UserModel ...
type UserModel struct{}

//Signin ...
func (m UserModel) Signin(form forms.SigninForm) (user User, err error) {

err = db.GetDB().SelectOne(&user, "SELECT id, email, password, name, updated_at, created_at FROM public.user WHERE email=LOWER($1) LIMIT 1", form.Email)

if err != nil {
return user, err
}

bytePassword := []byte(form.Password)
byteHashedPassword := []byte(user.Password)

err = bcrypt.CompareHashAndPassword(byteHashedPassword, bytePassword)

if err != nil {
return user, errors.New("Invalid password")
}

return user, nil
}

如何解决 sql: no rows in result set 错误?

最佳答案

您应该更改代码中的操作顺序。首先,您需要使用 if err := c.ShouldBindWith(&signinForm, binding.Form); 从请求中获取数据err != nil { 然后你需要尝试使用 user, err := userModel.Signin(signinForm)

从数据库中获取数据

关于sql - "sql: no rows in result set",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48932423/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com