2012-12-20 58 views
1

好吧所以這裏是我的MySQL功能選擇到@var總是空

DELIMITER $$ 

CREATE DEFINER=`root`@`%` FUNCTION `password_reset_request`(spUsername VARCHAR(120)) RETURNS varchar(255) CHARSET utf8 
BEGIN 
    DECLARE vcode VARCHAR(255); 
    DECLARE muid INTEGER; 
    SET vcode = "test"; 

    select id into muid from scheme.users where [email protected] limit 1; 

    RETURN muid; 

    IF muid is null THEN 
     RETURN 'BADUSER'; 
    ELSE 
     insert into `password_reset`(`uid`,`code`) 
      values (muid,vcode) 
     ON DUPLICATE KEY UPDATE 
      `code`=vcode; 
     RETURN vcode; 
    END IF; 
END 

問題我已經是muid總是null。我甚至用@muid取代了所有的muid,這並沒有改變結果。

當我運行select id from scheme.users where [email protected] limit 1;並用相同的值替換@spUsername我傳入該函數,它給了我正確的信息。

我也放在RETURN @spUsername來驗證該變量設置是否正確,它是。

任何想法?可能做些愚蠢的事情。

表計劃

CREATE TABLE `users` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `username` varchar(120) NOT NULL, 
    `email` varchar(200) NOT NULL, 
    `password` varchar(200) NOT NULL, 
    `vcode` varchar(120) NOT NULL, 
    `isverified` bit(1) DEFAULT b'0', 
    `verifydate` datetime DEFAULT NULL, 
    `date_created` datetime DEFAULT NULL, 
    `date_modified` datetime DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `username_UNIQUE` (`username`) 
) 

CREATE TABLE `password_reset` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `uid` int(11) NOT NULL, 
    `code` varchar(255) NOT NULL, 
    `iscompleted` bit(1) DEFAULT b'0', 
    `date_created` datetime DEFAULT NULL, 
    `date_modified` datetime DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `uid_UNIQUE` (`uid`) 
) 

回答

1

試試這個:

DELIMITER $$ 

CREATE DEFINER=`root`@`%` FUNCTION `password_reset_request`(_spUsername VARCHAR(120)) RETURNS VARCHAR(255) CHARSET utf8 
    READS SQL DATA 
BEGIN 
    DECLARE _vcode VARCHAR(255); 
    DECLARE _muid INT(10) DEFAULT 0; 
    SET vcode = "test"; 

    SELECT id INTO _muid 
    FROM scheme.users 
    WHERE username = _spUsername 
    LIMIT 1; 

    IF _muid = 0 THEN 
     RETURN 'BADUSER'; 
    ELSE 
     INSERT INTO `password_reset`(`uid`,`code`) 
      VALUES (_muid, _vcode) 
     ON DUPLICATE KEY UPDATE 
      `code` = _vcode; 
     RETURN _vcode; 
    END IF; 
END$$ 

DELIMITER ; 
+0

貌似增加的混合'READS SQL DATA'和改變'其中username = @ spUsername'到'其中,username = spUsername'做訣竅。謝謝。 –