2014-05-18 46 views
0

我正在使用存儲過程來登錄用戶,我需要返回播放器ID。所提供的名稱和密碼是正確的,當我測試了一下,結果返回1,但playerID保持NULL選擇不工作存儲的過程

`player_login` (
username TEXT CHARACTER SET utf8, 
txtPassword TEXT CHARACTER SET utf8, 
OUT playerID INTEGER, 
OUT result INTEGER 
) 
BEGIN 
DECLARE password TEXT DEFAULT player_hash_password(txtPassword); 
DECLARE num INTEGER DEFAULT 0; 
    SELECT PlayerID INTO playerID 
    FROM players 
    WHERE (LOWER(players.PlayerName)=LOWER(username) OR LOWER(players.PlayerEmail)=LOWER(username)) 
    AND players.PlayerPassword = password 
    LIMIT 1; 
... 

爲什麼PlayerID未選入playerID? PlayerID是一個非空的自動增量整數。

回答

2

您的參數與列名稱匹配,這是MySQL存儲過程常見的問題。使用參數的前綴,如:

`player_login` (
p_username TEXT CHARACTER SET utf8, 
p_txtPassword TEXT CHARACTER SET utf8, 
OUT p_playerID INTEGER, 
OUT p_result INTEGER 
) 
BEGIN 
DECLARE p_password TEXT DEFAULT player_hash_password(p_txtPassword); 
DECLARE num INTEGER DEFAULT 0; 
    SELECT p_PlayerID = playerID 
    FROM players p 
    WHERE (LOWER(p.PlayerName)=LOWER(p_username) OR LOWER(p.PlayerEmail)=LOWER(p_username)) 
    AND p.PlayerPassword = p_password 
    LIMIT 1; 
.