IMG-LOGO
공지사항 :

PHP 데이터베이스(Database)

lmkfox - 2025-08-09 06:26:25 7 Views 0 Comment

1. PHP에서 데이터베이스 사용 목적

  • 회원가입, 로그인, 게시판 등 데이터 저장 및 조회

  • 상품, 주문, 재고 관리 등 웹 서비스 핵심 데이터 관리

  • 통계 및 로그 분석


2. PHP에서 사용하는 주요 DB 연결 방법

1) MySQLi (MySQL Improved)

  • MySQL 전용

  • 절차지향(Procedural) 또는 객체지향(Object-oriented) 방식 모두 지원

  • 예: mysqli_connect()

2) PDO (PHP Data Objects)

  • 다양한 DB 지원 (MySQL, PostgreSQL, SQLite, Oracle 등)

  • 보안과 유연성 측면에서 더 권장됨

  • 예: new PDO()


3. MySQLi 예제 (절차지향 방식)

<?php
// DB 연결
$conn = mysqli_connect("localhost", "root", "비밀번호", "testdb");

// 연결 확인
if (!$conn) {
    die("DB 연결 실패: " . mysqli_connect_error());
}

// 데이터 조회
$sql = "SELECT id, name FROM users";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
    // 결과 출력
    while ($row = mysqli_fetch_assoc($result)) {
        echo "ID: " . $row["id"] . " 이름: " . $row["name"] . "<br>";
    }
} else {
    echo "데이터 없음";
}

// 연결 종료
mysqli_close($conn);
?>


4. PDO 예제 (객체지향 방식, 권장)

<?php
try {
    $pdo = new PDO("mysql:host=localhost;dbname=testdb;charset=utf8", "root", "비밀번호");
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $stmt = $pdo->query("SELECT id, name FROM users");

    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo "ID: {$row['id']} 이름: {$row['name']}<br>";
    }
} catch (PDOException $e) {
    echo "DB 오류: " . $e->getMessage();
}
?>


5. 데이터 삽입 (Prepared Statement 사용)

SQL 인젝션 방지를 위해 Prepared Statement를 사용하는 것이 안전합니다.

MySQLi

$stmt = mysqli_prepare($conn, "INSERT INTO users (name, email) VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, "ss", $name, $email);

$name = "홍길동";
$email = "hong@example.com";
mysqli_stmt_execute($stmt);

PDO

$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->execute([
    ':name' => '홍길동',
    ':email' => 'hong@example.com'
]);


6. 주요 데이터베이스 함수

함수/메서드

설명

mysqli_connect() / new PDO()

DB 연결

mysqli_query() / $pdo->query()

SQL 실행

mysqli_prepare() / $pdo->prepare()

준비된 문 실행

mysqli_fetch_assoc() / $stmt->fetch()

결과 행 가져오기

mysqli_num_rows()

결과 행 개수

mysqli_close()

연결 종료


7. 에러 처리

데이터베이스 작업 중 오류가 발생하면 로그를 남기고 예외 처리하는 것이 좋습니다.

try {
    $pdo = new PDO(...);
} catch (PDOException $e) {
    error_log("DB 연결 실패: " . $e->getMessage());
    die("서비스 오류");
}


8. 보안 주의사항

  • SQL 인젝션 방지 → Prepared Statement 사용

  • DB 계정 권한 최소화

  • 에러 메시지에 민감 정보 노출 금지

  • 입력값 검증 필수


9. 트랜잭션 (PDO)

여러 쿼리를 하나의 작업으로 처리할 때 사용

try {
    $pdo->beginTransaction();

    $pdo->exec("INSERT INTO accounts (user, balance) VALUES ('A', 1000)");
    $pdo->exec("INSERT INTO accounts (user, balance) VALUES ('B', 2000)");

    $pdo->commit();
} catch (Exception $e) {
    $pdo->rollBack();
    echo "트랜잭션 실패: " . $e->getMessage();
}


10. 결론

  • 간단한 MySQL 전용 프로젝트 → MySQLi

  • 다양한 DB 지원, 보안, 유지보수 → PDO

  • Prepared Statement와 트랜잭션을 잘 활용하면 보안과 안정성이 향상됨


댓글