我有一个问题,我创建了一个存储过程来通过发送他们的电子邮件 ID 和激活 key 来激活用户
这是 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');
最佳答案
这是对我有用的程序:
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');
它在我的机器上运行正常。
关于MySQL 更新查询成功但值根本没有改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16770010/