반응형
Web Development · PDO INSERT + Transaction
폼 + PDO INSERT —
beginTransaction / commit / rollBack 패턴
DB 작업의 안전한 일괄 처리
시작 핵심 코드
try{ $pdo->beginTransaction(); $sql = "INSERT INTO member (last_name, first_name, age) VALUES (:last_name, :first_name, :age)"; $stmh = $pdo->prepare($sql); $stmh->bindValue(':last_name', $_POST['last_name'], PDO::PARAM_STR); $stmh->bindValue(':first_name', $_POST['first_name'], PDO::PARAM_STR); $stmh->bindValue(':age', $_POST['age'], PDO::PARAM_INT); $stmh->execute(); $pdo->commit(); print "데이터를 ".$stmh->rowCount()."건 입력하였습니다."; }catch(PDOException $Exception){ $pdo->rollBack(); print "오류:".$Exception->getMessage(); }
1 트랜잭션이란?
여러 DB 작업을 한 묶음으로 처리하는 개념. 도중에 오류가 나면 모두 취소해 일관성 보장.
예: 계좌 이체 — A 계좌 차감 + B 계좌 입금이 한 트랜잭션. 중간에 실패하면 차감도 취소.
2 트랜잭션 3단
$pdo->beginTransaction(); // 1) 시작 // ... 여러 INSERT/UPDATE/DELETE ... $pdo->commit(); // 2) 모두 성공 → 영구 반영 // 또는 오류 시 $pdo->rollBack(); // 3) 모두 취소 → 이전 상태로
3 bindValue의 3번째 인자 — 데이터 타입
PDO::PARAM_STR // 문자열 PDO::PARAM_INT // 정수 PDO::PARAM_BOOL // 불리언 PDO::PARAM_NULL // null
명시하면 DB가 더 정확히 처리. 생략 시 기본 PARAM_STR.
반응형
4 rowCount()
마지막 SQL이 영향을 준 행 개수를 반환. INSERT 시 추가된 행, UPDATE 시 변경된 행 수 등.
5 commit() 빠뜨리면?
트랜잭션 시작 후
commit 안 부르면 변경사항이 영구 저장 안 됨. 페이지 종료 시 자동 롤백되는 경우 있음. 반드시 commit 명시!핵심 한 줄 요약
beginTransaction트랜잭션 시작 — 임시 변경
commit모든 변경을 영구 반영
rollBack모든 변경을 취소 — 이전 상태
PARAM_STR/INT바인딩 시 데이터 타입 명시
rowCount영향받은 행 개수
try/catch오류 시 자동 rollBack 처리
실무금융·예약·재고 등 일관성 중요한 작업
반응형
'php' 카테고리의 다른 글
| PHP MYDB.php — DB 접속 코드를 함수로 분리 완전 정리 (0) | 2026.06.19 |
|---|---|
| PHP search + list — LIKE 검색 + fetch 표 출력 완전 정리 (0) | 2026.06.19 |
| PHP PDO Prepared Statement — bindValue로 SQL 인젝션 차단 완전 정리 (0) | 2026.06.19 |
| PHP PDO 예외 처리 — try/catch + setAttribute 완전 정리 (0) | 2026.06.19 |
| PHP PDO — 통합 DB 접속 객체 완전 정리 (0) | 2026.06.19 |
왕진 블로그

댓글