PHP - PDO 확장: 초보자 가이드
안녕하세요, 열망하는 프로그래머 여러분! 오늘 우리는 PHP와 그 강력한 PDO 확장의 세계로 흥미로운 여정을 떠납니다. 코드를 한 줄도 작성해 본 적이 없다면 걱정하지 마세요 - 저는 당신의 친절한 안내자가 되어, 모든 것을 단계별로 설명해 드릴 것입니다. 커피 한 잔을 손에 들고, 이제 시작해 보겠습니다!
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();
}
?>
이를 해부해 보겠습니다:
- 우리는 연결 세부 정보(호스트, 데이터베이스 이름, 사용자 이름, 비밀번호)를 정의합니다.
-
try-catch
블록을 사용하여 잠재적인 오류를 처리합니다. -
try
블록 내에서 우리는 연결 세부 정보로 새로운 PDO 객체를 생성합니다. - 우리는 오류 모드를 예외를 던지는 모드로 설정합니다.
- 모든 것이 잘되면 "성공적으로 연결되었습니다"를 볼 수 있습니다. 그렇지 않으면 오류 메시지를 볼 수 있습니다.
연결 옵션
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