Mysql
 sql >> Base de données >  >> RDS >> Mysql

Déclencheur MySQL si la condition existe

Je pense que vous voulez le mettre à jour vers le OLD mot de passe, lorsque le NOUVEAU n'est pas fourni.

DROP TRIGGER IF EXISTS upd_user;

DELIMITER $$

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

DELIMITER ;

Cependant, cela signifie qu'un utilisateur ne peut jamais effacer un mot de passe.

Si le champ du mot de passe (déjà crypté) est renvoyé dans la mise à jour à mySQL, alors il ne sera ni nul ni vide, et MySQL tentera de refaire la fonction Password() dessus. Pour détecter cela, utilisez plutôt ce code
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 ;