
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 | |
์กฐํ์ | 51 |
๐ 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 ์์ ์ ๋ชจ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ์ด ๋๋ ๊ธฐ๋ฅ์ด๋ฏ๋ก, ์ถฉ๋ถํ ์ฐ์ตํ์ฌ ์ต์ํด์ง๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.