如果我运行以下代码,但将“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 回答
- 0 关注
- 284 浏览
添加回答
举报
0/150
提交
取消