为啥变量_count总是返回-1?

Posted

技术标签:

【中文标题】为啥变量_count总是返回-1?【英文标题】:Why does the variable _count always return -1?为什么变量_count总是返回-1? 【发布时间】:2014-10-21 04:43:07 【问题描述】:

环境:Apache/2.4.7 (Win32) OpenSSL/1.0.1e php/5.5.6 服务器版本:5.6.14 - mysql 社区服务器 (GPL) phpMyAdmin:4.0.9

即使 _count > 0,以下过程也始终返回 -1,并且数据更新已完成。

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

我对为什么将 _count 设置为 -1 感到困惑?

CALL `forgotten_password_update`('PASSWORD_ONE','SALT1', 'test2', 2);
CALL `forgotten_password_update`('Test1234','SALT2', 'test2', 2);

以下是为忘记密码重置和登录创建上述表格的设置脚本:

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);

【问题讨论】:

你能提供一些示例数据吗?我无法重现该问题。另外,请注意,您的代码 sn-p 调用过程 forgotten_password_url_update,而您提供了名为 forgotten_password_update 的过程的定义。您在测试正确的程序吗? 将很快更新它,插入代码。忘记删除其他 _url! 已完成。数据插入请参考最后部分。 【参考方案1】:

我使用 mysql 命令行对此进行了测试,问题出在 phpMyAdmin 控制台上。我正在关闭它,因为答案在命令行窗口中正确返回。

【讨论】:

以上是关于为啥变量_count总是返回-1?的主要内容,如果未能解决你的问题,请参考以下文章

为啥一个变量对多个值的不等式检查总是返回真?

PHP运行查询关闭每个数组变量并返回表中的结果

在 Erlang 中进行模式匹配映射时,为啥这个变量是未绑定的?

PHP $_SERVER['SERVER_ADDR'] 变量总是返回 127.0.0.1

为啥变量变为空?

为啥这个 volatile 变量的地址总是为 1?