你好傢伙我試圖驗證otp驗證手動。因爲我已經寫了這個存儲過程。當我開始這段代碼工作正常,但一段時間後,它開始給錯誤。它需要很長的時間來執行約50秒和之後,它給錯誤鎖定等待timeout.o任何人都可以告訴我爲什麼它給這樣的錯誤,以及如何解決它?存儲過程ahowing'鎖超時等待超時嘗試重新啓動mysql存儲過程中的事務'錯誤?如何處理它?
CREATE DEFINER=`xxxxx`@`xxxx` PROCEDURE `new_mobile_authentication`(
IN in_macID VARCHAR(500),IN in_otp INT(5),OUT in_msg VARCHAR(100))
BEGIN
DECLARE userCount INT(10);
DECLARE emailID VARCHAR(100);
DECLARE mobileNumber BIGINT(11);
DECLARE checkmatched INT(5);
DELETE FROM mob_user WHERE NOW()>end_time;
SELECT COUNT(*),email,mobile,otp into userCount,emailID,mobileNumber,checkmatched FROM mob_user WHERE mac_id=in_macID ;
SET @checkEmailPresent=(SELECT COUNT(*) FROM table A WHERE email_id=emailID);
IF(userCount!=0 AND @checkEmailPresent!=0)THEN
IF(checkmatched=in_otp)THEN
UPDATE table A SET auth='YES',mac_id=in_macID,mobile_num=mobileNumber WHERE email=emailID;
SET @affRow=(SELECT ROW_COUNT());
DELETE FROM mob_user WHERE mac_id=in_macID;
SELECT @affRow AS affRow,email FROM table A WHERE mac_id=in_macID;
ELSE
SELECT 'invalid otp' INTO in_msg;
END IF;
ELSEIF(userCount!=0 AND @checkEmailPresent=0)THEN
IF(checkmatched=in_otp)THEN
INSERT INTO table A(email,mobile_num,mac_id) VALUE (emailID,mobileNumber,in_macID,);
SET @affRow=(SELECT ROW_COUNT());
DELETE FROM mob_user WHERE mac_id=in_macID;
SELECT @affRow AS affRow,email FROM table A WHERE mac_id=in_macID;
ELSE
SELECT 'invalid otp' INTO in_msg;
END IF;
ELSE
SELECT 'session expired' INTO in_msg;
END IF;
END
您的第一個選擇...爲什麼?....和@affRow變量有什麼意義? – Hackerman
第一個選擇是用於驗證的目的是否存在電子郵件? @affRow僅用於檢查更新的行數。 –
但是,您的存儲過程執行的結果存儲在'in_msg' ....中,並且您沒有在您的sp上的任何邏輯步驟中使用@ affRow'! – Hackerman