PHP - PDO 확장: 초보자 가이드

안녕하세요, 열망하는 프로그래머 여러분! 오늘 우리는 PHP와 그 강력한 PDO 확장의 세계로 흥미로운 여정을 떠납니다. 코드를 한 줄도 작성해 본 적이 없다면 걱정하지 마세요 - 저는 당신의 친절한 안내자가 되어, 모든 것을 단계별로 설명해 드릴 것입니다. 커피 한 잔을 손에 들고, 이제 시작해 보겠습니다!

PHP - PDO Extension

PDO는 무엇인가요?

PDO는 PHP Data Objects의 약자입니다. PHP가 다양한 종류의 데이터베이스와 소통할 수 있도록 도와주는 유니버설 트랜슬레이터처럼 생각할 수 있습니다. 다양한 나라 사람들과 소통하려고 할 때 - PDO는 모든 사람과 소통할 수 있는 다국어 친구입니다!

PDO를 사용해야 하는 이유

PDO에 대해 왜 신경 써야 할까요? 작은 이야기 하나를 들려드리겠습니다. 저는 처음 PHP를 가르쳤을 때, 각 데이터베이스 유형에 대해 다른 방법을 사용했습니다. 데이터베이스를 변경할 때마다 새로운 언어를 배우는 것 같았습니다. PDO는 이 모든 것을 바꿔 놓았습니다. PDO는 데이터베이스와 일관된 방식으로 작업할 수 있게 해주어, 개발자로서의 삶을 훨씬 쉽게 만들어줍니다.

이제 코드로 손을 더러워 보겠습니다!

PDO 연결

연결 설정

PDO를 사용하기 위해 먼저 데이터베이스에 연결해야 합니다. 다음은 그 방법입니다:

<?php
$host = 'localhost';
$dbname = 'my_database';
$username = 'root';
$password = 'password';

try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "성공적으로 연결되었습니다";
} catch(PDOException $e) {
echo "연결 실패: " . $e->getMessage();
}
?>

이를 해부해 보겠습니다:

  1. 우리는 연결 세부 정보(호스트, 데이터베이스 이름, 사용자 이름, 비밀번호)를 정의합니다.
  2. try-catch 블록을 사용하여 잠재적인 오류를 처리합니다.
  3. try 블록 내에서 우리는 연결 세부 정보로 새로운 PDO 객체를 생성합니다.
  4. 우리는 오류 모드를 예외를 던지는 모드로 설정합니다.
  5. 모든 것이 잘되면 "성공적으로 연결되었습니다"를 볼 수 있습니다. 그렇지 않으면 오류 메시지를 볼 수 있습니다.

연결 옵션

PDO는 연결할 때 다양한 옵션을 설정할 수 있습니다. 다음은 예제입니다:

<?php
$options = [
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];

$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password, $options);
?>

이 옵션은 기본 가져오기 모드를 연관 배열로 설정하고,仿 prepared statements를 비활성화합니다. 이제 이 것이 무의미할 수 있지만, 우리는 이 개념을 더 깊이 탐구해 나갈 것입니다!

PDO 클래스 메서드

이제 연결이 완료되었으므로, 가장 흔히 사용할 PDO 메서드를 살펴보겠습니다.

쿼리 실행

query() 메서드

query() 메서드는 간단한 SQL 쿼리를 실행하는 데 사용됩니다:

<?php
$stmt = $pdo->query("SELECT * FROM users");
while ($row = $stmt->fetch()) {
echo $row['name'] . "\n";
}
?>

이 코드는 'users' 테이블에서 모든 사용자를 가져와 이름을 출력합니다. PDO가 도서관(데이터베이스)에서 사용자 책을 찾아 이름을 읽어주는 것과 같습니다.

exec() 메서드

exec() 메서드는 결과 셋을 반환하지 않는 SQL 문을 실행하는 데 사용됩니다:

<?php
$count = $pdo->exec("DELETE FROM users WHERE active = 0");
echo "$count 비활성 사용자가 삭제되었습니다.";
?>

이 코드는 비활성 사용자를 삭제하고 몇 명이 삭제되었는지 알려줍니다. PDO가 사용자 목록을 정리하여 비활성 사용자를 제거하는 것을 상상해 보세요.

Prepared Statements

Prepared statements는 사용자 입력을 다루할 때 안전한 방법으로 쿼리를 실행하는 데 도움이 됩니다. SQL 주입 공격을 방지하는 데 도움이 됩니다.

<?php
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->execute(['name' => 'John Doe', 'email' => '[email protected]']);
?>

이는 PDO가 양식을 채우는 것처럼 생각할 수 있습니다. 먼저 쿼리를 준비하고, 그런 다음 :name:email 빈칸을 실제 값으로 채웁니다.

결과 가져오기

PDO는 결과를 가져오는 여러 가지 방법을 제공합니다:

<?php
$stmt = $pdo->query("SELECT * FROM users");

// 연관 배열로 가져오기
$user = $stmt->fetch(PDO::FETCH_ASSOC);

// 오브젝트로 가져오기
$user = $stmt->fetch(PDO::FETCH_OBJ);

// 모든 결과 가져오기
$users = $stmt->fetchAll();
?>

이는 PDO가 검색한 데이터를 다양한 방식으로 포장하는 것을 상상해 보세요. 목록처럼 배열로, 구조화된 패키지처럼 오브젝트로, 또는 모두 한 번에 가져올 수 있습니다.

트랜잭션 관리

트랜잭션은 여러 가지 작업을 단일 작업 단위로 수행할 수 있게 해줍니다:

<?php
try {
$pdo->beginTransaction();
$pdo->exec("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
$pdo->exec("UPDATE accounts SET balance = balance + 100 WHERE id = 2");
$pdo->commit();
} catch (Exception $e) {
$pdo->rollBack();
echo "실패: " . $e->getMessage();
}
?>

이는 PDO에게 " 중요한 작업을 할 것이니, 모든 것이 잘되면 모두 실행하고, 그렇지 않으면 모두 취소하도록" 말하는 것과 같습니다. 데이터 무결성을 보장해야 하는 작업에 매우 유용합니다.

PDO 메서드 표

이제 우리가 논의한 주요 PDO 메서드를 요약하는 표를 제공하겠습니다:

메서드 설명 예제
query() SQL 쿼리 실행 $stmt = $pdo->query("SELECT * FROM users");
exec() SQL 문 실행 및 영향을 받은 행 수 반환 $count = $pdo->exec("DELETE FROM users WHERE active = 0");
prepare() 쿼리 준비 $stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
execute() 준비된 쿼리 실행 $stmt->execute(['name' => 'John', 'email' => '[email protected]']);
fetch() 결과 셋의 다음 행 가져오기 $row = $stmt->fetch(PDO::FETCH_ASSOC);
fetchAll() 결과 셋의 모든 행 가져오기 $rows = $stmt->fetchAll();
beginTransaction() 트랜잭션 시작 $pdo->beginTransaction();
commit() 트랜잭션 커밋 $pdo->commit();
rollBack() 트랜잭션 롤백 $pdo->rollBack();

이제 PHP의 PDO 확장의 기본 내용을 다루었습니다. 기억하시라, 새로운 기술을 배우는 것은 연습이 필요합니다.PDO를 마스터하는 데 걸리는 시간이 걸릴 수 있지만, 계속 실험하고 있으면 곧 데이터베이스를 다루는 프로가 될 것입니다!

미래의 데이터베이스 마법사 여러분, 즐겁게 코딩하세요!

Credits: Image by storyset