개발/php

[php] 사용자 계정 탈퇴시 관련 내용들이 삭제되지 않는 오류 해결하기

1104탱크 2025. 3. 5. 17:49
반응형

오류내용

Fatal error: Uncaught mysqli_sql_exception: Cannot delete or update a parent row: a foreign key constraint fails (`board`.`board`, CONSTRAINT `board_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `register` (`id`)) in /var/www/html/border/profile/profileDelete.php:11 Stack trace: #0 /var/www/html/border/profile/profileDelete.php(11): mysqli->query() #1 {main} thrown in /var/www/html/border/profile/profileDelete.php on line 11

 

외래키와 연관된 데이터를 수정하거나 삭제를 할수 없다 라는 말입니다.

 

 

해결방법  >>> alter 옵션을 이용하여  해당 테이블이  삭제하게  변경해준다.

 

1.  외래키가  맺어져있는지 확인한다.

mysql> show create table board;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                           |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| board | CREATE TABLE `board` (
  `bo_id` int NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `content` longtext NOT NULL,
  `user_id` int DEFAULT NULL,
  PRIMARY KEY (`bo_id`),
  KEY `user_id` (`user_id`),
  CONSTRAINT `board_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `register` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

 

2.  외래키를 지정 해제해준다.

mysql> ALTER TABLE board DROP FOREIGN KEY board_ibfk_1;
Query OK, 0 rows affected (0.22 sec)
Records: 0  Duplicates: 0  Warnings: 0

 

3. 외래키를 새로 추가해준다.

mysql> ALTER TABLE board ADD CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES register(id) ON DELETE CASCADE;
Query OK, 1 row affected (0.17 sec)
Records: 1  Duplicates: 0  Warnings: 0

 

4. 이제 테스트를 해본다. 참고로  난  try catch 를 이용하였다.

<?php


try{
  include "../db/dbconn.php";
  session_start();

 // 사용자로부터 아이디를 가져온다.
  $del_value_id = $_SESSION['id'];

 
 // db의 사용자 테이블을 찾는다.  >>> 삭제를 시작한다. 관련 글도 같이 삭제한다. 
  $result = $con -> query("DELETE FROM register WHERE id = $del_value_id   ");



  if($result){ // 성공하면 
     echo "
     <script>
     alert('계정삭제되었습니다.');  
     location.href = '../join/join.php';
     </script>
     " 	 ;
     session_destroy();
      $con -> close();
     }else{

      echo 
      "
      <script> alert('계정 삭제에 실패하였습니다.'); location.href = '../profile/profile.php'; </script>
      "
}

}catch (Exception $e) {
  echo "Exception". $e ->getcode().": ".$e -> getMessage()."<br />".
     " in ". $e->getFile()." on line ". $e -> getLine()."<br />";
}
?>

 

catch에서  Exception 클래스를 이용해서  코드에서 어디가 오류 나왔는지 알수 있게 하였다.

해당 사이트를 참고하였습니다.

 

https://m.blog.naver.com/hongyou022/221627176184

 

[PHP] 예외 처리 (try,thorw,catch)

예외 처리 개념 try 블록 내부에서 코드가 실행되도록 하는 것이 예외 처리의 기본이다. 코드 형식은 다음...

blog.naver.com

 

 

관련 코드

https://github.com/Andante23/phpStudy

 

GitHub - Andante23/phpStudy: php 게시판

php 게시판. Contribute to Andante23/phpStudy development by creating an account on GitHub.

github.com