Mysql 选择“不适用于存储过程”
我正在处理一个用于登录用户的存储过程,需要返回玩家id。测试时提供的名称和密码是正确的,结果返回1,但playerID保持为空Mysql 选择“不适用于存储过程”,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,我正在处理一个用于登录用户的存储过程,需要返回玩家id。测试时提供的名称和密码是正确的,结果返回1,但playerID保持为空 `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_passwor
`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是一个非空的自动递增整数。您的参数与列名匹配,这是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;
.