Mysql 选择@var始终为空
好的,这是我的mysql函数Mysql 选择@var始终为空,mysql,stored-functions,Mysql,Stored Functions,好的,这是我的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
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
总是null
。我甚至用@muid
替换了所有muid
,这并没有改变结果
当我运行时,从scheme.users中选择id,其中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`)
)
试试这个:
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 ;
试试这个:
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 ;
看起来是添加
读取SQL数据
和将其中的username=@spUsername
更改为其中的username=spUsername
的组合实现了这一点。谢谢。看起来像是添加读取SQL数据
和将WHERE username=@spUsername
更改为WHERE username=spUsername
的组合,成功了。非常感谢。