0
當我需要使用@來引用mySQL中的變量時,我很模糊。我來自MS SQL,你總是使用它,但顯然這在mySQL中是不正確的。這個if/then存儲過程有什麼問題?
因此,即使會話值已過期,以下存儲過程始終執行第一個IF塊 - 因爲它始終執行更新語句。顯然,唯一能找到的用於mySQL存儲過程的調試工具可以在Windows和Linux上運行。我在Mac上。 Wamp wamp wamp。
所以是的。任何人都可以看到這裏有什麼問題?謝謝!
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
對於什麼它應該在僞代碼做記錄:
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;
}
在此先感謝。
Barranka所涉及的主要問題,我在下面他的回答看;但我不確定爲什麼第一個IF塊會在你的版本中執行,因爲sessId應該始終爲NULL。另外,如果你真的想要一個返回值而不是結果集,一個存儲的FUNCTION可能更適合你的需求。 – Uueerdo