Wednesday 15 April 2015

Stored Procedure for Login Authentication not working MySQL -


मैं संसाधित प्रक्रियाओं में MySQL डेटाबेस के साथ लॉगिन प्रमाणीकरण कार्य कर रहा हूं। नीचे कोड है, मैंने लिखा है लेकिन इसका काम नहीं कर रहा है। मुझे पता है, क्या गलत है।

मेरे पास प्रश्न हैं
  1. कैसे जांचें, चाहे CURSOR है खाली या null
  2. क्या कोई तरीका है, हम प्रक्रिया लिखते हैं।

    मैं क्या कर रहा हूं ..
    1. इनपुट पैरामीटर और ouput के लिए दो पैरामीटर लेना।

    2. जांचें कि उपयोगकर्ता या पासवर्ड वैध नहीं है, उन मानकों को आउट पैरामीटर में SELECT 'अमान्य प्रयोक्तानाम और पासवर्ड', 'शून्य' संदेश में, ओयूएसएआरआईडी;

    3. अगर उपयोगकर्ता और वैध में पासवर्ड, लेकिन isActive स्तंभ 0 तो चुनें 'निष्क्रिय खाता', 'अशक्त' oMessage, oUserID में है;

    4. अगर सफलता, का चयन करें 'सफल', v_UserID जांच oMessage, oUserID;

      एसक्यूएल कोड <> <कोड pre> परिसीमक का उपयोग $$ `acl` $$ Definer = बनाएँ` FreeUser` @ `localhost` प्रक्रिया` acl`.`checkAuthenticationTwo` (iUsername VARCHAR में (50), iPassword VARCHAR में (50), बाहर ओ संदेश VARCHAR (50), OUserID INT आउट करें) DECLARE v_isActive INT; DECLARE v_UserID INT; DECLARE v_count INT; का चयन करें UserID, m_users से IsActive लिए cur1 कर्सर घोषणा कहां (LOGINNAME = TRIM (iUsername) या ईमेल = TRIM (iUsername)) और `Password` = iPassword; ओपन क्यूअर 1; सेट v_count = (SELECT FOUND_ROWS ()); यदि (v_count & gt; 0) वीएयूयूआईएसआईडीआईडी, वी_आईएसएक्टिव; यदि (v_isActive = 0) तो 'निष्क्रिय खाता' का चयन करें, 'शून्य' में संदेश, ओयूएसएआरआईडी; इसके बाद 'सफलता' का चयन करें, वी_यूएसआरआईडी में ओमेसेज, ओयूएसएआरआईडी; अगर अंत; चयन करें 'अमान्य उपयोगकर्ता नाम और पासवर्ड', 'शून्य' में संदेश, ओयूएसएआरआईडी; अगर अंत; END $ $ DELIMITER;

      आपको इसके लिए निश्चित रूप से CURSOR s की आवश्यकता नहीं है ; सादे सरल SELECT का उपयोग करें के अपने सपा एक अधिक संक्षिप्त संस्करण कैसा लग सकता है

        परिसीमक $$ Definer = बनाएँ `FreeUser` @` localhost` प्रक्रिया `acl`.`checkAuthenticationTwo` (iUsername VARCHAR में (50), में iPassword VARCHAR (50), बाहर oMessage VARCHAR (50), बाहर oUserID INT) का चयन करें मामला शुरू करते IsActive = 0 फिर 'निष्क्रिय खाता' शेष 'सफल' अंत, मामला है जब IsActive = 0 तब शून्य oMessage, से oUserID जांच और के UserID अंत M_users जहां (लॉगिन नाम = = TRIM (iUsername) या ईमेल = TRIM (iUsername)) और `पासवर्ड` = iPassword LIMIT 1; - आप बेहतर डुप्लिकेट से खुद को सुरक्षित रख सकते हैं SET oMessage = IFNULL (oMessage, 'अमान्य उपयोगकर्ता नाम और पासवर्ड'); END $ $ DELIMITER;   

      यह एक पंक्ति का चयन करने की कोशिश करता है जहां यूजरनेम और ई-मेल IUsername और पासवर्ड के बराबर होती है Iaspassword के बराबर होती है और आउटपुट वैरिएबल के लिए दो मान आउटपुट करती है। जिस तरह से यह का उपयोग करता है का उपयोग करने के लिए है एक्टिव वैल्यू यदि यह 0 है, तो उपयोगकर्ता के लिए 'निष्क्रिय' और नल के लिए एक संदेश सेट करता है। अन्यथा यह 'सफलता' संदेश और वास्तविक यूजर आईडी लौटाता है। अब, यदि उपयोगकर्ता को नहीं मिला है तो दोनों चर को नल पर सेट किया जाएगा। हम इसका लाभ उठा सकते हैं और उस तथ्य का पता लगाने और 'अमान्य उपयोगकर्ता नाम और पासवर्ड' को सेट करने के लिए IFNULL () फ़ंक्शन का उपयोग कर सकते हैं।

      यहां < / Strong> डेमो व्यक्तिगत रूप से मैं आगे बढ़ता हूं और इसे थोड़ा सा सरल बना देता हूं और इसे एक इंटरफ़ेस के साथ एक-स्पष्टीकरण सपा बनाती हूं:

       रिटर्न: यूजरआड (जो है & gt; 0) अगर उपयोगकर्ता उपयोगकर्ता नाम और पासवर्ड यदि 0 - उपयोगकर्ता नाम और (या) पासवर्ड गलत है -1 - कोई उपयोगकर्ता निष्क्रिय है  

      यह विचार है कि यह उपयोगकर्ता के लिए उपयुक्त संदेश बनाने के लिए एक प्रस्तुति स्तर का कार्य है और उन सभी संदेशों को नहीं छींटा डेटा परत में लिखेक्स।

        बनायें DEFINER = 'फ्रीयूसर' @ 'लोकलहोस्ट' प्रक्रिया 'एसीएल'। 'चेकऑक्टिफिकेशन थ्री' (आईयूयूएन नाम वीएआरएआर (50), आईपैसवर्ड वीएआरएआर (50) में, ओयूसीआरआईडी आउट INT) SET oUserID = IFNULL ((चयन का मामला जब IActive = 0 THEN -1 ELSE UserID अंत से m_users जहां (लॉगिन नाम = TRIM (iUsername) या ईमेल = TRIM (iUsername)) और `पासवर्ड` = iPassword LIMIT 1 - आप बेहतर तुम्हारी रक्षा डुप्लिकेट से च), 0);   

      यहां डेमो है

No comments:

Post a Comment