반응형
Web Development · PDO Exception
PDO 예외 처리 —
try / catch + ATTR_ERRMODE 설정
접속 실패·SQL 오류를 안전하게 잡기
시작 오늘 분석할 코드
<?php try{ $pdo = new PDO('mysql:host=localhost;dbname=sampledb;charset=utf8', 'samplee', 'password'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); print "접속하였습니다."; }catch(PDOException $Exception){ die('접속 오류:'.$Exception->getMessage()); } ?>
1 try / catch — 예외 처리
try { 위험한 코드 실행 } catch (예외타입 $e) { 오류 처리 }
PDO는 오류 발생 시 PDOException을 던진다 (ATTR_ERRMODE 설정 시). catch로 잡아 친절한 메시지나 로그로 처리.
2 setAttribute — 동작 옵션 설정
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // ↑ ↑ // "오류 모드" "예외로 던지기"
이 설정 없으면 PDO는 오류 시 false를 반환할 뿐 예외를 던지지 않는다 (조용한 실패).
3 ATTR_EMULATE_PREPARES = false
"prepared statement를 PHP 측에서 흉내내지 말고 진짜 MySQL 측에 맡기라"는 설정. 보안과 성능에 더 유리.
반응형
4 getMessage()
예외 객체의 getMessage는 오류 설명 문자열을 반환. 디버깅과 로그에 유용.
실무에서는 사용자에게는 친절한 메시지, 로그에는 상세 메시지를 분리해 기록하는 게 좋다.
5 권장 PDO 초기 설정
$pdo = new PDO($dsn, $user, $pass, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]);
생성 시 옵션 배열로 한 번에 전달하는 게 깔끔.
핵심 한 줄 요약
try / catch예외 발생 시 catch 블록으로 분기
PDOExceptionPDO에서 던지는 예외 클래스
ATTR_ERRMODEERRMODE_EXCEPTION으로 예외 던지기
EMULATE_PREPARES = false진짜 prepared statement 사용 (안전·빠름)
getMessage()예외 메시지 반환
die()치명적 오류 시 즉시 종료
생성자 옵션new PDO 4번째 인자로 한 번에 설정
반응형
'php' 카테고리의 다른 글
| PHP form + view + PDO INSERT — 트랜잭션 처리 완전 정리 (0) | 2026.06.19 |
|---|---|
| PHP PDO Prepared Statement — bindValue로 SQL 인젝션 차단 완전 정리 (0) | 2026.06.19 |
| PHP PDO — 통합 DB 접속 객체 완전 정리 (0) | 2026.06.19 |
| PHP mysqli — MySQL 접속 객체 + 오류 처리 완전 정리 (0) | 2026.06.19 |
| MySQL CREATE + INSERT — member 테이블 생성과 데이터 삽입 완전 정리 (0) | 2026.06.18 |
왕진 블로그

댓글