1

我有一个问题,我创建了一个存储过程,通过发送用户的电子邮件 ID 和激活密钥来激活用户

这是 SQL 语法(在 MySQL 中)

DELIMITER $$

CREATE PROCEDURE `dbname`.`sp_userActivate` (
    IN email VARCHAR(140),
    IN ac VARCHAR(64)
)
BEGIN
SET SQL_SAFE_UPDATES=0;
UPDATE user SET activated = 1
    WHERE user.email = email AND 
      user.activation_key=ac;
commit;
END

当我执行语法时,它已成功执行,但是当我查看表时,激活的值仍然保持= 0(根本没有更新)

我已经看了两次以上,以确保电子邮件和激活等于存储在表中,

这个查询有什么问题?

更新

这是我在模式中的表结构

表设计

在此先感谢您的帮助。

创建表的 SQL 语句

CREATE  TABLE IF NOT EXISTS `db`.`user` (

`no` INT(11) NOT NULL AUTO_INCREMENT ,
`username` VARCHAR(140) NOT NULL ,
`password` VARCHAR(128) NOT NULL ,
`firstname` VARCHAR(300) NOT NULL ,
`lastname` VARCHAR(300) NULL DEFAULT NULL ,
`email` VARCHAR(140) NOT NULL ,
`pepper` CHAR(128) NOT NULL ,
`activation_key` VARCHAR(64) NULL DEFAULT NULL ,
`gender` CHAR(1) NULL DEFAULT NULL ,
`activated` CHAR(1) CHARACTER SET 'latin1' COLLATE 'latin1_bin' NULL DEFAULT '0' ,
PRIMARY KEY (`no`) ,
UNIQUE INDEX `username` (`username` ASC) ,
UNIQUE INDEX `email` (`email` ASC) ,
INDEX `user_firstname_idx` (`firstname` ASC) ,
INDEX `user_lastname_idx` (`lastname` ASC) )

例如行

insert into 
user(username, password,firstname, lastname, email,pepper,activation_key,gender)
values("usr1test","c781bf44a464a5946ef36a7250f5504388914bbf6287fabaf938472f46c413d71cd7bf2b3077eeac8675419d5f022ff3652ba7e13e8","user1","test","usr1test@localhost","af41bfa3c9324f39fd82f84125967b38969662256cf8249e73e3bd2cef3928b5","OGE4Y2E2OWUtMmM2Mi00MjJkLWI0NTQtNzJkZDQ1OTcxNjUx",'M');
4

2 回答 2

0

这是对我有用的程序:

DROP PROCEDURE IF EXISTS sp_userActivate;
DELIMITER $$

CREATE PROCEDURE sp_userActivate (
    IN email VARCHAR(140),
    IN ac VARCHAR(64)
)
BEGIN
    SET SQL_SAFE_UPDATES=0;
    UPDATE `user`
        SET activated = 1
        WHERE 
            `user`.`email` = email
        AND 
      `user`.`activation_key` = ac;
    COMMIT;
END $$
DELIMITER ;

运行这个,然后尝试:

CALL sp_userActivate('usr1test@localhost', 
'OGE4Y2E2OWUtMmM2Mi00MjJkLWI0NTQtNzJkZDQ1OTcxNjUx');

它在我的机器上正常工作。

于 2013-05-27T09:52:16.780 回答
0

好的,在看到我表中的表数据之后。似乎关键是在最后一个字符之后有空格。

例子 :

  1. -- 有空格:ZWRhNzZmMzMtMmI2Ny00NDBlLTkxNTUtNmQ2MWIwYjg3MzA4_(见_?)
  2. -- 没有空格:ZWRhNzZmMzMtMmI2Ny00NDBlLTkxNTUtNmQ2MWIwYjg3MzA4

因此,MySQL 看到的第 1 点和第 2 点是不同的。

我希望这能说明我的问题。

感谢所有的贡献者

于 2013-05-27T13:38:09.993 回答