반응형
오류내용
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
'개발 > php' 카테고리의 다른 글
[ ubuntu ] DB 백업 파일 적용하기 (0) | 2025.02.27 |
---|---|
php를 우분투에 설치하고 나서 실행시 나왔던 오류!!!! (0) | 2025.02.23 |
[ PHP ] php form 입력을 이용한 계산기 만들어보기 (0) | 2025.02.11 |
[windows] PHP 환경 직접 구축해보기 (1) | 2025.02.11 |