반응형
업데이트 문에 새 암호가 설정되어있을 때만 암호를 업데이트하는 업데이트 트리거를 작성하려고하지만 구문을 확인하는 데 끔찍한 시간을 보내고 있습니다. 이것은 생각할 필요가 없지만 해결책을 찾지 못하고 있습니다.
내 코드는 다음과 같습니다.
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;
난 노력 했어:
IF (NEW.password <> NULL) THEN
IF (NEW.password) THEN
IF NEW.password <> NULL THEN
IF (NEW.password > 0) THEN
IF (NEW.password != NULL) THEN
그리고 다른 많은 조합을 확신하지만 작동하지 않습니다. 누구든지 통찰력이 있습니까?
해결 방법
새 비밀번호가 제공되지 않는 경우 OLD
비밀번호로 다시 업데이트하려는 것 같습니다.
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 ;
그러나 이것은 사용자가 암호를 비울 수 없음을 의미합니다.
<시간> 암호 필드 (이미 암호화 됨)가 mySQL 업데이트에서 다시 전송되는 경우 null 또는 공백이 아니며 MySQL은 여기에서 Password () 함수를 다시 실행하려고 시도합니다. 이를 감지하려면 대신이 코드를 사용하십시오.
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 ;
참조 페이지 https://stackoverflow.com/questions/5372872
반응형
'MySql' 카테고리의 다른 글
MySQL 데이터베이스 레코드를 배열에 저장 (0) | 2020.10.14 |
---|---|
MySQL null 인 mysql update increment int 필드 (0) | 2020.10.14 |
MySQL insert current date time using laravel (0) | 2020.10.14 |
MySQL mySql에서 초 (또는 밀리 초)를 타임 스탬프 (또는 날짜처럼 보이는 문자열)로 변환하는 방법 (0) | 2020.10.14 |
MySQL Calculating the Median with Mysql (0) | 2020.10.14 |
댓글