如果我运行以下代码,但将“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
}
杨魅力
相关分类