环境:Apache / 2.4.7(Win32)OpenSSL / 1.0.1e PHP / 5.5.6 服务器版本:5.6.14 - MySQL社区服务器(GPL) phpMyAdmin:4.0.9
以下过程返回-1,即使_count> 0,完成数据更新。
DELIMITER //
DROP PROCEDURE IF EXISTS `forgotten_password_update`//
CREATE PROCEDURE `forgotten_password_update`(
IN _password longtext,
IN _salt varchar(255),
IN _parameter varchar(255),
IN _id bigint(20)
)
BEGIN
DECLARE _count tinyint(1);
SELECT COUNT(*) into _count FROM forgot_password_reset WHERE parameter = _parameter AND user_id = _id AND is_reset = FALSE AND NOW() <= datetime_expiry;
IF _count > 0 THEN
UPDATE forgot_password_reset SET is_reset = TRUE, datetime_reset = NOW() WHERE _parameter = _parameter AND id = _id AND is_reset = FALSE;
UPDATE login SET password = _password, salt = _salt WHERE id = _id;
ELSE
SET _count = -1;
END IF;
SELECT _count as num_of_updated_records;
END//
DELIMITER END;
我在phpMyAdmin中使用MySQL控制台运行了这个。如果_count> 0,则更新已成功完成,_count将返回-1。
如果_count&lt; 0,更新不运行,_count返回-1。
我很困惑为什么_count被设置为-1?
CALL `forgotten_password_update`('PASSWORD_ONE','SALT1', 'test2', 2);
CALL `forgotten_password_update`('Test1234','SALT2', 'test2', 2);
以下是设置脚本,用于为forgot_password_reset和login:
创建上面的表DROP TABLE IF EXISTS `login`;
CREATE TABLE IF NOT EXISTS `login` (
`login_id` bigint(20) NOT NULL AUTO_INCREMENT,
`password` longtext,
`salt` varchar(255) DEFAULT NULL,
PRIMARY KEY (`login_id`),
)
DROP TABLE IF EXISTS `forgot_password_reset`;
CREATE TABLE IF NOT EXISTS `forgot_password_reset` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) NOT NULL,
`parameter` varchar(255) NOT NULL,
`is_reset` boolean default false,
`datetime_reset` datetime default NULL,
`datetime_expiry` datetime default NULL,
PRIMARY KEY (`id`),
CONSTRAINT `fk_user_id` FOREIGN KEY (`user_id`) REFERENCES login(`id`)
)
编辑:要插入的数据:
INSERT INTO `login` (login_id, password, salt) VALUES (2, 'temp_password', '0000');
INSERT INTO `forgot_password_reset` (user_id, parameter, datetime_expiry) VALUES (2, 'test2', NOW() + INTERVAL 1 DAY);
答案 0 :(得分:0)
我使用mysql命令行对此进行了测试,问题出在phpMyAdmin控制台上。我正在关闭这个,因为答案在命令行窗口中正确返回。