2011-03-21 30 views
9

Güncelleştirme ifadesinde yeni bir parola belirlendiğinde yalnızca bir parolayı güncelleyen bir güncelleştirme tetikleyicisi yazmaya çalışıyorum ancak sözdizimini bozmaya çalışırken korkunç bir zaman yaşıyorum. Bu no-brainer olmalı ama ben sadece çözüm bulamıyorum. DenedimKoşul mevcutsa MySQL tetikleyicisi

CREATE TRIGGER upd_user BEFORE UPDATE ON `user` 
FOR EACH ROW BEGIN 
    IF (NEW.password <> '') THEN 
     SET NEW.password = PASSWORD(NEW.password); 
    END IF; 
END; 

:

İşte benim kod

IF (NEW.password <> NULL) THEN 

IF (NEW.password) THEN 

IF NEW.password <> NULL THEN 

IF (NEW.password > 0) THEN 

IF (NEW.password != NULL) THEN 

Ve eminim diğer birçok kombinasyonları değilim ama sadece çalışmıyor. Herhangi bir fikir sahibi olan var mı?

cevap

25

NEW one sağlanmadığında, OLD parolasına güncellemek istediğiniz anlamına gelir. Bununla birlikte, bir kullanıcı bir parolayı asla boş bırakamayacağı anlamına gelir. Şifre alanı (zaten şifreli) mySQL için güncellemede geri gönderiliyor ise


, o zaman null veya boş olmayacak ve MySQL üzerine Parola() fonksiyonunu yeniden yapmak dener. Bu algılamak için bu kodu Sanırım bu tetikleyici şifre şifreleme uygulamak için kastediyor yerine

DELIMITER $$ 

    CREATE TRIGGER upd_user BEFORE UPDATE ON `user` 
    FOR EACH ROW BEGIN 
     IF (NEW.password IS NULL OR NEW.password = '' OR NEW.password = OLD.password) THEN 
      SET NEW.password = OLD.password; 
     ELSE 
      SET NEW.password = Password(NEW.Password); 
     END IF; 
    END$$ 

DELIMITER ; 
+0

kullanın. –

+0

@yper - Bunu dışarıda bıraktım ama saldırıyı yaptığım kısım, eskiyi korumak için aslında, aslında onu tetiklemeniz gerçeği * geri * tetikleyici – RichardTheKiwi

+1

içinde doğrudur. soru :) –