1

さて、これが私のmysql関数です

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 username=@spUsername 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が常にあることですnullmuidallをに置き換えても@muid、結果は変わりませんでした。

実行して関数に渡すのと同じ値にselect id from scheme.users where username=@spUsername 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`)
)
4

1 に答える 1

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 ;
于 2012-12-21T11:11:29.780 に答える