0
後,我對MySQL的存儲過程中的問題,已經做了與IF THEN ELSE另一個邏輯,但我仍然有我無法理解的問題...MySQL存儲過程SELECT VAR值錯誤INSERT
該過程包括上兩個用戶輸入:user_id和meet_id。該過程定義一個名爲'ue'的變量,該變量存儲一系列驗證的結果(如果用戶存在,則存在,如果存在事件,如果事件日期仍然有效,則爲)。
之後,它在IF THEN ELSE選擇器中的多個表上執行INSERT和UPDATE一些數據,並根據驗證選擇1(或0)AS結果。
但我的問題是:它總是返回我0作爲'結果',就好像我的驗證變量是0當我做INSERT ...並且有什麼地方變得很奇怪,如果我刪除INSERT [... ]。代碼行,它會正確返回驗證值(1或0)。
程序的代碼是這一個:提前
CREATE DEFINER=`nwouserf`@`localhost`
PROCEDURE `join_event`(IN `user_id` BIGINT(64), IN `event_id` INT)
NOT DETERMINISTIC MODIFIES SQL DATA SQL SECURITY DEFINER
begin
DECLARE ue INT;
SET ue = EXISTS(SELECT 1 FROM users WHERE fb_uid=user_id)
AND EXISTS(SELECT 1 FROM meetup WHERE meet_id=event_id)
AND EXISTS(SELECT 1 FROM meetup WHERE date > NOW() AND meet_id = event_id)
AND EXISTS(SELECT 1 FROM meetup WHERE meet_id = event_id AND participants <= max_participants)
AND NOT EXISTS(SELECT 1 FROM meetup_participation WHERE fb_uid = user_id AND meet_id = event_id);
IF ue = 1 THEN
INSERT INTO meetup_participation (fb_uid, meet_id) VALUES (user_id, event_id);
UPDATE users SET events_participated = events_participated + 1 WHERE fb_uid=user_id;
UPDATE meetup SET participants = participants + 1 WHERE meet_id=event_id;
SELECT 1 AS result;
ELSEIF ue = 0 THEN
SELECT 0 AS result;
ELSE
SELECT null AS result;
END IF;
end
謝謝! 我一直堅持這一段時間,並不能找出原因。
仍然不是正確的解決方案,我認爲,因爲它沒有OUT參數和插入參數工作...但我做了一個解決你的答案,因爲我做了我創建的其他程序...必須改變SELECT SET,並做一個雙重查詢。它唯一的問題在於PHP,在我看來,多重查詢並不是一個好主意,因爲我必須調用CALL過程並選擇輸出變量,它可能會在查詢時失敗並繼續下一個查詢。 –
爲什麼你不把它作爲一個函數呢?從我聽到的你看來,這看起來好多了。 – Valentin
我是MySQL的新手,我可能是錯的,但是從我迄今爲止讀過的內容來看,在修改表上的數據時不應該使用函數(INSERT,UPDATE不允許)。 [鏈接](http://stackoverflow.com/a/1179778/2612722) –