2013-05-27 18 views
1

我有一個問題,我創建了一個存儲過程,通過發送他們的電子郵件ID和激活密鑰的MySQL更新查詢全成,但價值觀不改變在所有

這是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(不更新的話)

我已經比看起來更兩次確保電子郵件和激活與存儲在表中相等,

這個查詢有什麼問題?

UPDATE

這是您的幫助

Table Design

感謝架構我的表結構。

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","[email protected]","af41bfa3c9324f39fd82f84125967b38969662256cf8249e73e3bd2cef3928b5","OGE4Y2E2OWUtMmM2Mi00MjJkLWI0NTQtNzJkZDQ1OTcxNjUx",'M'); 
+0

我已刪除我的回答,基於這一點,你可以刪除'SET SQL_SAFE_UPDATES = 0;'和'COMMIT;'並嘗試再次執行。 –

+0

嗨@JW웃再次感謝您的安撫,我嘗試過這種方法,但仍然無法正常工作。我認爲activation_key值有問題。 – randytan

+0

你能給樣品記錄嗎? –

回答

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('[email protected]', 
'OGE4Y2E2OWUtMmM2Mi00MjJkLWI0NTQtNzJkZDQ1OTcxNjUx'); 

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

+0

嗨,感謝您的幫助,我剛剛更新了上述信息。你能看到更新的部分嗎? 從上面的信息我看你更新基於'關鍵',但在我的情況下,我想改變特定的列。 – randytan

+0

@randytan你能提供CREATE TABLE語句加上2行樣本數據(就像我在答案中所做的那樣),所以我可以完全重現你的錯誤? – user4035

+0

好的@ user4035請參閱上面的更新部分。謝謝 – randytan

0

好的,看完表格數據後我的表格。看起來關鍵是在最後一個字符之後有空白空間。

例如:

  1. - 用空格: ZWRhNzZmMzMtMmI2Ny00NDBlLTkxNTUtNmQ2MWIwYjg3MzA4_
  2. - 無空格(見_?):ZWRhNzZmMzMtMmI2Ny00NDBlLTkxNTUtNmQ2MWIwYjg3MzA4

因此,MySQL的見點1號和2是不同的。

我希望這可以讓我的問題清楚。

謝謝所有貢獻者

+0

@ user4035我認爲這是答案,爲什麼我無法更新我的表格:D – randytan