로그인 회원가입
모두인포
전체IT경제사회생활스포츠시사여행연애

PHP 데이터베이스(Database)

lmkfox · 2025-08-09 · 조회 0
PHP 데이터베이스(Database)
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와 트랜잭션을 잘 활용하면 보안과 안정성이 향상됨

댓글

아직 댓글이 없습니다.

로그인 후 댓글을 남길 수 있습니다.