본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

PHP PDO 예외 처리 — try/catch + setAttribute 완전 정리

by 왕진 2026. 6. 19.
반응형

 

 

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번째 인자로 한 번에 설정
반응형

댓글