데브포일 홈
DEV MODE - 실서버 영향 없음 📦 배포 관리
PHP + MySQL 연동 실습
+200 XP
LEVEL 36 QUEST

PHP + MySQL 연동 실습

PHP + MySQL 연동 실습 — DevFoil 바이브코딩 Stage 8, Lv.36

PDO로 MySQL 연결하기
왜 PDO인가?
PHP에서 데이터베이스에 접속하는 방법은 여러 가지가 있지만, PDO(PHP Data Objects)가 현재 표준입니다.

PDO의 장점: 여러 DB 지원(MySQL, PostgreSQL, SQLite 등), 준비된 문(Prepared Statement) 기본 지원, 일관된 에러 처리, 객체 지향 인터페이스.
<?php
// ===== db.php - 데이터베이스 연결 설정 =====

$host = "localhost";
$dbname = "my_app";
$username = "root";
$password = "your_password";
$charset = "utf8mb4";

$dsn = "mysql:host=$host;dbname=$dbname;charset=$charset";

$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,  // 에러 시 예외 발생
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,        // 연관 배열로 반환
    PDO::ATTR_EMULATE_PREPARES   => false,                    // 진짜 준비된 문 사용
];

try {
    $pdo = new PDO($dsn, $username, $password, $options);
    // 연결 성공!
} catch (PDOException $e) {
    // 실서비스에서는 에러 메시지를 사용자에게 보여주지 마세요
    error_log("DB 연결 실패: " . $e->getMessage());
    die("서버 오류가 발생했습니다. 잠시 후 다시 시도해주세요.");
}
?>
💡 charset은 반드시 utf8mb4
utf8이 아닌 utf8mb4를 사용하세요. MySQL의 utf8은 3바이트까지만 지원하여 이모지 등 4바이트 문자가 깨집니다. utf8mb4는 완전한 유니코드를 지원합니다.
Prepared Statement - SQL 인젝션 방어의 핵심
SQL 인젝션이란?
사용자 입력을 SQL 쿼리에 직접 넣으면, 공격자가 SQL 코드를 주입하여 DB 전체를 탈취하거나 삭제할 수 있습니다. Prepared Statement(준비된 문)를 사용하면 SQL과 데이터가 분리되어 인젝션이 원천 차단됩니다.
<?php
// 위험한 코드 - SQL 인젝션 취약!
$email = $_POST["email"];
$result = $pdo->query("SELECT * FROM users WHERE email = '$email'");
// 공격자가 email에 ' OR '1'='1 을 넣으면 모든 사용자 정보 유출!

// 안전한 코드 - Prepared Statement 사용
// 방법 1: 위치 기반 바인딩 (?)
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$email]);
$user = $stmt->fetch();

// 방법 2: 이름 기반 바인딩 (:name)
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email AND role = :role");
$stmt->execute([
    ":email" => $email,
    ":role"  => "admin"
]);
$user = $stmt->fetch();
?>
방식코드 예시안전성
직접 삽입"WHERE id = $id"SQL 인젝션 취약
Prepared (?)"WHERE id = ?"안전
Prepared (:name)"WHERE id = :id"안전 + 가독성 좋음
🔒
여기까지는 미리보기입니다
PHP + MySQL 연동 실습
무료 가입하면 이어서 볼 수 있고, 강의를 완료할 때마다 XP와 레벨이 쌓입니다.
Google로 3초 만에 시작 →🧵 Threads로 시작무료 공개 강의 둘러보기 (Lv.1~3)