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

Go MySQL 存储过程无法返回结果集

Go MySQL 存储过程无法返回结果集

Go
慕运维8079593 2021-07-14 13:01:50
如果我运行以下代码,但将“CALL”替换为"SELECT * FROM User LIMIT 1"我找回了一个用户。如果我切换到调用存储过程,我会不断收到此错误:panic: Error 1312: PROCEDURE MobiFit_Dev.User_ByEmail can't return a result set in the given context [recovered]    panic: Error 1312: PROCEDURE MobiFit_Dev.User_ByEmail can't return a result set in the given context我如何呼叫我的 SP?这是我的 SP:DELIMITER $$USE `MobiFit_Dev`$$DROP PROCEDURE IF EXISTS `User_ByEmail`$$CREATE DEFINER=`root`@`localhost` PROCEDURE `User_ByEmail`(pEmail VARCHAR(250))BEGIN    SELECT         *     FROM        `User`     WHERE `Email` = pEmail ;END$$DELIMITER ;包实体import (    "database/sql"    "fmt"    "github.com/go-sql-driver/mysql"    "mobifit/db"    // "time")const (    Male   = "Male"    Female = "Female")type User struct {    Id             sql.NullInt64    Email          sql.NullString    HashedPassword sql.NullString    RoleId         sql.NullInt64    FirstName      sql.NullString    LastName       sql.NullString    Gender         sql.NullString    DateOfBirth    mysql.NullTime    Height         sql.NullFloat64    CurrentWeight  sql.NullFloat64    CreatedAt      mysql.NullTime    ConfirmedAt    mysql.NullTime    LastActivityAt mysql.NullTime    DeletedAt      mysql.NullTime}func UserByEmail(email string) *User {    db := db.DB()    u := new(User)    rows, err := db.Query("CALL User_ByEmail(?)", email) << A SELECT *... works but this doesn't    if err != nil {        panic(err)    }    fmt.Println(rows.Columns())    for rows.Next() {        if err := rows.Scan(            &u.Id,            &u.Email,            &u.HashedPassword,            &u.RoleId,            &u.FirstName,            &u.LastName,            &u.Gender,            &u.DateOfBirth,            &u.Height,            &u.CurrentWeight,            &u.CreatedAt,            &u.ConfirmedAt,            &u.LastActivityAt,            &u.DeletedAt); err != nil {            panic(err)        }    }    if err := rows.Err(); err != nil {        panic(err)    }    fmt.Println(u)    return u}
查看完整描述

2 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

尝试使用单引号。

像这样

CALL User_ByEmail('?');

当输入参数的类型为 时VARCHAR,您应该始终在值周围使用单引号。


查看完整回答
反对 回复 2021-07-19
  • 2 回答
  • 0 关注
  • 284 浏览
慕课专栏
更多

添加回答

举报

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