首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果/然后存储proc,这个有什么问题?

问如果/然后存储proc,这个有什么问题?
EN

Stack Overflow用户
提问于 2015-05-04 17:29:48
回答 1查看 29关注 0票数 0

当我需要你使用@在mySQL中引用vars时,我很模糊。我来自mySQL,您经常使用它,但显然这在mySQL中是不正确的。

因此,下面的存储过程总是执行第一个IF块,即使会话值过期了--因为它总是在执行update语句。显然,我能找到的mySQL存储过程的唯一调试工具运行在Windows和Linux上。我在苹果电脑上。湿的。

所以是的。有人能看到这里出了什么问题吗?谢谢!

代码语言:javascript
复制
DELIMITER $$

CREATE DEFINER=`xxx`@`localhost` PROCEDURE `validate_session`(uid INT, token VARCHAR(256))
BEGIN
    DECLARE sessId INT DEFAULT NULL;

    SELECT sessId = id FROM UserSessions
    WHERE userId = uid
    AND sessionToken = token
    AND expires > INTERVAL 2 MINUTE + NOW() ORDER BY expires DESC LIMIT 1;

IF sessId IS NOT NULL THEN
    UPDATE UserSessions 
    SET expires = INTERVAL 2 HOUR + NOW() 
    WHERE id = sessId;
ELSE
    DELETE FROM UserSessions 
    WHERE userId = uid 
    AND sessionToken = token;
    SET @sessId = 0;

END IF;

SELECT sessId;
END

为了记录它在伪代码中应该做什么:

代码语言:javascript
复制
if we have a session for this user, with a matching token which has not expired {
    update the expiration time to 2 hours from now
    return the session id;
}
else {
    delete the (now stale) session
    return 0;
}

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-04 17:37:12

你不能设置sessId的值..。你在你的查询中做了比较。

我认为你需要这样的东西:

代码语言:javascript
复制
CREATE DEFINER=`xxx`@`localhost` PROCEDURE `validate_session`(uid INT, token VARCHAR(256))
BEGIN
    DECLARE sessId INT DEFAULT NULL;

    SELECT id 
        INTO sessId -- Here is the assignment
    FROM UserSessions
    WHERE userId = uid
      AND sessionToken = token
      AND expires > INTERVAL 2 MINUTE + NOW() 
    ORDER BY expires DESC 
    LIMIT 1;

    IF sessId IS NOT NULL THEN
        UPDATE UserSessions 
            SET expires = INTERVAL 2 HOUR + NOW() 
            WHERE id = sessId;
    ELSE
        DELETE FROM UserSessions 
            WHERE userId = uid 
            AND sessionToken = token;
        SET sessId = 0;
   END IF;

   SELECT sessId;
END

参考资料:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30036233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档