1

这是我的第一个 mySQL 存储函数,因为我一直用 php 管理这些事情。我想要一个检查用户是否可以登录我的客户区的功能。我写了上面的代码:

DELIMITER $$

CREATE FUNCTION `A05`.`login` (user VARCHAR(64),pass VARCHAR(64)) RETURNS INT
BEGIN
    declare num_rows int;
    declare id int;
    SELECT (@num_rows:=COUNT(*)),(@id:=`Credential_id`) FROM `A05`.`Credentials` where `Credential_UserName` = user;    
    if num_rows = 0 then
        -- user not present
        return (-1);
    end if;
    -- user present, checking password
    SELECT (@num_rows:=COUNT(*)),(@id:=`Credential_id`) FROM `A05`.`Credentials` where `Credential_id` = id AND `Credential_PASSWORD` = SHA1(pass); 
    if num_rows = 0 then
        -- user presente, password incorrect
        INSERT INTO  `a05`.`Events` (
            `Event_id` ,
            `Event_RegistrationDate` ,
            `Event_VariationDate` ,
            `Event_State`,
            `Event_Notes`,
            `Event_SenderId`,
            `Event_Type`
        )
        VALUES (
            NULL ,  NOW(),  NOW(), 'wp', NULL, id, 1
        );
        return (-2);
    end if;
    -- user present, password correct
    UPDATE `A05`.`Credentials` SET `Credential_LastAccess`=NOW() where `Credential_id` = id;
    INSERT INTO  `a05`.`Events` (
        `Event_id` ,
        `Event_RegistrationDate` ,
        `Event_VariationDate` ,
        `Event_State`,
        `Event_Notes`,
        `Event_SenderId`,
        `Event_Type`
    )
    VALUES (
        NULL ,  NOW(),  NOW(), 'ok', NULL, id, 0
    );
    return id;
END

我认为语法应该是正确的,除了最后一个语句 return id 因为我返回一个集合而不是一个整数。问题是,当我尝试将此函数存储在 mysql 上时,出现此错误:

Error 1415: Not allowed to return a result set from a function

然后我将最后一条语句从“return id”更改为“return 0”以进行测试,但我一直收到同样的错误。可能是一个新手错误,因为这是我第一次使用 sql“高级”脚本。非常感谢您!

4

0 回答 0