PHP MYDB.php 재사용 — CRUD 전체에 하나의 접속 함수 완전 정리
MYDB.php는 PDO 접속을 함수로 감싼 공통 모듈이다. INSERT를 처리하는 view.php, SELECT+DELETE를 처리하는 list.php, UPDATE를 처리하는 update.php — 어느 파일이든 2줄이면 DB 접속이 완료된다. 접속 정보는 오직 MYDB.php 한 곳에만 존재한다.
→ PDO 객체 반환
4개 파일(view, list, updateform, update)은 각기 다른 SQL을 실행하지만, 모두 같은 DB에 접속해야 한다. MYDB.php 이전에는 각 파일 상단에 10줄짜리 접속 코드가 중복되었다. MYDB.php로 분리한 후, 각 파일의 접속 코드는 2줄로 줄어들고 접속 정보는 단 1곳에만 존재한다.
| 파일 | SQL 종류 | MYDB.php 사용 방식 |
|---|---|---|
view.php |
INSERT (회원 등록) | require_once + db_connect() → $pdo로 INSERT 실행 |
list.php |
DELETE + SELECT (삭제 + 목록) | require_once + db_connect() → 삭제 후 전체 조회 |
updateform.php |
SELECT (수정 폼 데이터 조회) | require_once + db_connect() → id로 1건 조회 |
update.php |
UPDATE (회원 정보 수정) | require_once + db_connect() → id 조건으로 UPDATE |
PDO 접속 실패를 외부에서 처리하려면 모든 파일에서 catch 블록을 작성해야 한다. 함수 안에 try-catch를 두면, 접속 오류를 한 곳에서 처리하고 die()로 즉시 중단한다. 파일마다 에러 처리 코드를 반복하지 않아도 된다.
list.php가 MYDB.php를 include하고, list.php를 include하는 다른 파일이 있다면 MYDB.php가 두 번 로드될 수 있다. function db_connect()가 두 번 정의되면 PHP는 "Cannot redeclare db_connect()" Fatal Error를 발생시킨다. require_once는 이미 로드된 파일을 두 번 포함하지 않도록 내부적으로 추적한다.
db_connect() 안의 $pdo는 함수 스코프에 갇혀 있다. return $pdo로 반환된 PDO 객체는 호출한 쪽의 변수에 저장되어, 파일이 끝날 때까지(또는 변수가 null이 될 때까지) 살아있다. 파일 전체에서 하나의 PDO 연결을 공유하므로 DB 커넥션을 1번만 연다.
require_once("MYDB.php")의 경로는 실행 파일 기준 상대경로다. list.php와 MYDB.php가 같은 폴더에 있으면 파일명만 써도 된다. 폴더 구조가 복잡해지면 __DIR__ . "/MYDB.php" 형태의 절대경로를 쓰는 것이 안전하다.
| 경로 방식 | 예시 | 특징 |
|---|---|---|
| 파일명만 (상대경로) | "MYDB.php" |
같은 폴더에 있을 때. 실행 위치 변경 시 깨질 수 있음 |
| __DIR__ 절대경로 | __DIR__ . "/MYDB.php" |
MYDB.php와 같은 폴더. 실행 위치 무관하게 안정적 |
| 상위 폴더 | "../common/MYDB.php" |
여러 폴더에서 공유하는 공통 MYDB.php 위치 지정 |
이 MYDB.php 패턴은 객체지향(OOP)의 시작점이다. 함수 한 개에서 출발해 클래스와 메서드로 발전하는 경로가 자연스럽게 연결된다. 또한 .env 파일로 접속 정보를 분리하거나, 싱글톤 패턴으로 PDO 인스턴스를 재사용하는 방향으로 확장할 수 있다.
$pdo = new PDO(...);
return $pdo;
}
$pdo = db_connect(); // 매번 새 연결
private static $pdo = null;
public static function connect() {
if (!self::$pdo) self::$pdo = new PDO(...);
return self::$pdo;
}
} // 연결 1회만 생성
| 실수 | 증상 | 해결 |
|---|---|---|
| require 대신 include 사용 | MYDB.php 없어도 경고만 출력하고 진행 → null $pdo로 연쇄 에러 | 접속 파일은 require_once — 없으면 즉시 Fatal Error가 더 안전 |
| require 반복 사용 (_once 없음) | "Cannot redeclare db_connect()" Fatal Error | require_once로 중복 방지 |
| return $pdo 누락 | $pdo = db_connect() 결과가 null → prepare() 호출 시 에러 | 함수 마지막 줄에 return $pdo 필수 |
| 경로 오류 (파일명만 사용) | 다른 폴더에서 실행 시 "Failed opening required" Fatal Error | __DIR__ . "/MYDB.php" 형태로 안전한 절대경로 사용 |
| 접속 정보를 MYDB.php 외에도 보관 | 비번 변경 시 여러 파일 수정 필요 — 분리의 이점 사라짐 | 접속 정보는 반드시 MYDB.php(또는 .env) 단 1곳에만 존재 |
핵심 한 줄 요약
Tags
'php' 카테고리의 다른 글
| PHP 등록 폼 — POST + hidden action=insert · 통합 CRUD 허브 패턴 완전 정리 (0) | 2026.07.09 |
|---|---|
| PHP 통합 CRUD 허브 — list.php에서 INSERT·UPDATE·DELETE·검색·목록 완전 정리 (0) | 2026.07.09 |
| PHP DELETE 링크 UI — GET 파라미터 · 쿼리 문자열 · href 액션 패턴 완전 정리 (0) | 2026.07.08 |
| PHP PDO DELETE + 전체 목록 — GET 파라미터 · isset · query() 완전 정리 (0) | 2026.07.08 |
| PHP PDO UPDATE + 세션 파기 — UPDATE SET · session_destroy · $_SESSION 초기화 완전 정리 (0) | 2026.07.08 |
왕진 블로그

댓글