
PHP 강의
>PHP - 중급
📚 PHP 중급 - 1주차: 데이터베이스 기초 및 MySQL 연동 (PDO) - 02 SQL 기본 (SELECT, INSERT, UPDATE, DELETE)
![]() |
평점 | 10.0 | 라이센스 | free |
---|---|---|---|---|
사용자평점 | 10.0 | 운영체제 | ||
다운로드 | 1 | 파일크기 | 0 | |
제작사 | LUZENSOFT | 등록일 | 2025-07-10 14:58:06 | |
조회수 | 18 |
📚 PHP 중급 - 1주차: 데이터베이스 기초 및 MySQL 연동 (PDO) - 02 SQL 기본 (SELECT, INSERT, UPDATE, DELETE)
데이터베이스와 SQL 소개
안녕하세요! #PHP 중급 1주차 과정에 오신 것을 환영합니다. 이번 시간에는 #데이터베이스의 가장 기본적인 개념을 이해하고, 실제 #MySQL 데이터베이스와 연동하는 방법을 배울 것입니다. 특히 #PDO(PHP Data Objects)를 사용하여 안전하고 효율적으로 데이터베이스 작업을 수행하는 데 초점을 맞출 것입니다.
데이터베이스는 정보를 체계적으로 저장하고 관리하는 시스템입니다. 웹 애플리케이션에서 사용자 정보, 게시물, 상품 정보 등 모든 동적인 데이터는 데이터베이스에 저장됩니다. 그리고 이 데이터베이스와 소통하기 위한 언어가 바로 #SQL(Structured Query Language)입니다. SQL은 데이터베이스에 데이터를 #요청하거나, #추가하거나, #수정하거나, #삭제하는 등 다양한 작업을 수행하는 데 사용됩니다.
MySQL 데이터베이스 준비
실습을 위해 #MySQL 데이터베이스가 설치되어 있어야 합니다. #XAMPP, #WAMP 또는 #Docker 등을 이용하여 MySQL을 쉽게 설치할 수 있습니다. 이미 설치되어 있다면 다음 단계로 진행하세요.
실습을 위한 간단한 테이블을 하나 만들어 보겠습니다. users
라는 이름의 테이블을 생성하고 몇 가지 데이터를 미리 넣어두겠습니다.
SQL
CREATE DATABASE phplearning;
USE phplearning;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO users (name, email) VALUES ('김철수', 'kim@example.com');
INSERT INTO users (name, email) VALUES ('이영희', 'lee@example.com');
INSERT INTO users (name, email) VALUES ('박찬호', 'park@example.com');
위 SQL 코드를 MySQL 클라이언트(예: #phpMyAdmin, #MySQL Workbench, #HeidiSQL 등)에서 실행하여 데이터베이스와 테이블을 생성해 주세요.
PDO를 이용한 MySQL 연동 기본
#PHP에서 데이터베이스에 연결하고 작업을 수행하는 가장 권장되는 방법은 PDO를 사용하는 것입니다. PDO는 다양한 데이터베이스에 일관된 인터페이스를 제공하여 데이터베이스 종류에 상관없이 동일한 코드를 사용할 수 있게 해줍니다.
1. 데이터베이스 연결
PHP
<?php
$host = '127.0.0.1'; // 또는 'localhost'
$db = 'phplearning';
$user = 'root'; // MySQL 사용자 이름
$pass = ''; // MySQL 비밀번호 (설정되어 있지 않다면 비워둠)
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;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, $user, $pass, $options);
echo "데이터베이스에 성공적으로 연결되었습니다. <br>";
} catch (PDOException $e) {
throw new PDOException($e->getMessage(), (int)$e->getCode());
}
?>
PDO
객체를 생성하여 데이터베이스에 연결합니다. $dsn
(Data Source Name)은 데이터베이스 종류, 호스트, 데이터베이스 이름, 문자셋 정보를 포함합니다. $options
는 PDO의 동작 방식을 설정하는 배열입니다. 특히 PDO::ATTR_ERRMODE
를 PDO::ERRMODE_EXCEPTION
으로 설정하면 데이터베이스 오류 발생 시 예외가 발생하여 오류를 쉽게 감지하고 처리할 수 있습니다.
SQL 기본 명령어 (CRUD)
이제 데이터를 다루는 가장 기본적인 SQL 명령어들인 #SELECT, #INSERT, #UPDATE, #DELETE에 대해 알아보겠습니다. 이 네 가지 명령어는 #CRUD(Create, Read, Update, Delete) 작업의 핵심을 이룹니다.
1. SELECT (데이터 읽기)
데이터베이스에서 데이터를 조회할 때 사용합니다.
PHP
<?php
// ... (이전 PDO 연결 코드)
try {
echo "<h2>SELECT 예제</h2>";
// 1-1. 모든 사용자 조회
$stmt = $pdo->query('SELECT id, name, email, reg_date FROM users');
echo "<h3>모든 사용자:</h3>";
while ($row = $stmt->fetch()) {
echo "ID: " . $row['id'] . ", 이름: " . $row['name'] . ", 이메일: " . $row['email'] . ", 등록일: " . $row['reg_date'] . "<br>";
}
echo "<br>";
// 1-2. 특정 ID의 사용자 조회 (준비된 구문 사용 - 보안 및 성능 권장)
$id_to_find = 2;
$stmt = $pdo->prepare('SELECT id, name, email FROM users WHERE id = :id');
$stmt->execute(['id' => $id_to_find]);
$user = $stmt->fetch();
if ($user) {
echo "<h3>ID가 {$id_to_find}인 사용자:</h3>";
echo "ID: " . $user['id'] . ", 이름: " . $user['name'] . ", 이메일: " . $user['email'] . "<br>";
} else {
echo "ID가 {$id_to_find}인 사용자를 찾을 수 없습니다.<br>";
}
} catch (PDOException $e) {
echo "오류: " . $e->getMessage() . "<br>";
}
?>
$pdo->query()
: 단순한 쿼리를 실행할 때 사용합니다.$pdo->prepare()
와$stmt->execute()
: SQL 인젝션 공격을 방지하고 성능을 향상시키는 **준비된 구문(Prepared Statements)**을 사용할 때 필수적입니다.:id
와 같은 플레이스홀더를 사용하고execute()
메서드에 값을 배열로 전달합니다.$stmt->fetch()
: 한 행씩 데이터를 가져옵니다.while
루프와 함께 사용하여 모든 행을 순회할 수 있습니다.
2. INSERT (데이터 추가)
데이터베이스에 새로운 데이터를 삽입할 때 사용합니다.
PHP
<?php
// ... (이전 PDO 연결 코드)
try {
echo "<h2>INSERT 예제</h2>";
$new_name = '김영희';
$new_email = 'younghee@example.com';
$stmt = $pdo->prepare('INSERT INTO users (name, email) VALUES (:name, :email)');
$stmt->execute(['name' => $new_name, 'email' => $new_email]);
echo "새 사용자 '{$new_name}'가 성공적으로 추가되었습니다.<br>";
echo "새로 추가된 사용자의 ID: " . $pdo->lastInsertId() . "<br>";
} catch (PDOException $e) {
echo "오류: " . $e->getMessage() . "<br>";
}
?>
INSERT
문도 준비된 구문을 사용하는 것이 좋습니다. lastInsertId()
메서드는 마지막으로 삽입된 행의 ID를 반환합니다.
3. UPDATE (데이터 수정)
기존 데이터베이스의 데이터를 변경할 때 사용합니다.
PHP
<?php
// ... (이전 PDO 연결 코드)
try {
echo "<h2>UPDATE 예제</h2>";
$update_id = 1;
$new_email_for_update = 'kim.chulsoo@example.com';
$stmt = $pdo->prepare('UPDATE users SET email = :email WHERE id = :id');
$stmt->execute(['email' => $new_email_for_update, 'id' => $update_id]);
echo "ID {$update_id} 사용자의 이메일이 '{$new_email_for_update}'로 성공적으로 업데이트되었습니다.<br>";
echo "영향을 받은 행 수: " . $stmt->rowCount() . "<br>";
} catch (PDOException $e) {
echo "오류: " . $e->getMessage() . "<br>";
}
?>
UPDATE
문 역시 준비된 구문을 사용합니다. rowCount()
메서드는 쿼리 실행으로 영향을 받은 행의 수를 반환합니다.
4. DELETE (데이터 삭제)
데이터베이스에서 데이터를 제거할 때 사용합니다.
PHP
<?php
// ... (이전 PDO 연결 코드)
try {
echo "<h2>DELETE 예제</h2>";
$delete_id = 3;
$stmt = $pdo->prepare('DELETE FROM users WHERE id = :id');
$stmt->execute(['id' => $delete_id]);
echo "ID {$delete_id} 사용자가 성공적으로 삭제되었습니다.<br>";
echo "영향을 받은 행 수: " . $stmt->rowCount() . "<br>";
} catch (PDOException $e) {
echo "오류: " . $e->getMessage() . "<br>";
}
?>
DELETE
문도 준비된 구문을 사용하며, rowCount()
를 통해 삭제된 행의 수를 확인할 수 있습니다.
결론
이번 시간에는 #데이터베이스의 중요성을 이해하고, #PDO를 사용하여 #MySQL에 연결하는 방법을 배웠습니다. 또한, 데이터를 조회하고(SELECT), 추가하고(INSERT), 수정하고(UPDATE), 삭제하는(DELETE) #SQL 기본 명령어들을 #PHP 코드에서 #안전하게 사용하는 방법을 실습했습니다. 이 CRUD 작업은 모든 웹 애플리케이션의 핵심이 되는 기능이므로, 충분히 연습하여 익숙해지는 것이 중요합니다.