2014-12-15 3 views
1

I 사용자가 데이터베이스의 첫 번째 행으로 돌아 오기에 관계없이 전자 메일에 사용되는 입력, 이미 존재하는 경우 확인하는 저장 프로 시저가 있습니다. select 문을 수동으로 실행하면 올바른 결과를 얻을 수 있습니다. 어떤 제안?MySQL을 저장 프로 시저가 올바른 결과를 반환하지

CREATE DEFINER=`myusername`@`localhost` PROCEDURE `User_Auth`(IN `Email` VARCHAR(30)) 
BEGIN 
    DECLARE User_ID INT(30); 
     SELECT `User ID` INTO User_ID FROM `Users` WHERE `Email` = Email LIMIT 1; 

    IF (User_ID > 0) THEN 
     SELECT * FROM `Users` WHERE `User ID` = User_ID; 
    ELSE 
     SELECT concat('No Users Found: ', Customer_Name); 
    END IF; 
END 
+0

당신이 당신이 실제로 얻고있는 무슨 대 얻기 위해 무엇을 기대 보여주는 일부 샘플 데이터를 추가 할 수 있습니다

그것은이 혼동을 피하기 위해 뭔가 매개 변수를 앞에하는 것이 좋습니다? –

+0

어떤 종류의 열 이름이 User ID입니까? – SMA

+0

매개 변수'Email'의 이름을'Email' 열과 동일한 것으로 보입니다. 매개 변수 이름을 다른 것으로 변경하십시오. –

답변

3

귀하의 문제는 의심의 여지가 여기에있다 :

SELECT `User ID` INTO User_ID FROM `Users` WHERE `Email` = Email LIMIT 1; 

엉하기 위해; 매개 변수 이름이 열 이름과 같습니다. 그 수 있습니다 실제로 작동하지만, 그것을 만드는 규칙은 이상한 수 있습니다. (나는 당신이 따옴표를 바꾼다면, 잘될 것이라고 생각한다.)

CREATE DEFINER=`myusername`@`localhost` PROCEDURE `User_Auth`(IN `EmailAddress` VARCHAR(30)) 
BEGIN 
    DECLARE User_ID INT(30); 
     SELECT `User ID` INTO User_ID FROM `Users` WHERE `Email` = EmailAddress LIMIT 1; 

    IF (User_ID > 0) THEN 
     SELECT * FROM `Users` WHERE `User ID` = User_ID; 
    ELSE 
     SELECT concat('No Users Found: ', Customer_Name); 
    END IF; 
END 
1

문제는 당신의 변수 이름 email, 열와 동일하게 가지고 있다는 것입니다 :

하지만 정말, 당신이해야 할 것은 뭔가에 Email 매개 변수의 이름을 변경합니다. 따라서 email = email은 기본적으로 열 (column) 이름만을 참조하기 때문에 아무 작업도 수행하지 않습니다.

CREATE DEFINER=`myusername`@`localhost` PROCEDURE `User_Auth`(IN v_Email VARCHAR(30)) 
BEGIN 
    DECLARE v_User_ID INT(30); 
    SELECT `User ID` INTO User_ID FROM `Users` u WHERE u.Email = v_Email LIMIT 1; 

    IF (User_ID > 0) THEN 
     SELECT * FROM `Users` WHERE `User ID` = v_User_ID; 
    ELSE 
     SELECT concat('No Users Found: ', Customer_Name); 
    END IF; 
END 
관련 문제