PHP + MySQL 입문 실전 가이드
1장. PHP와 데이터베이스란?
PHP는 웹 서버에서 실행되는 프로그래밍 언어입니다.
대표적으로:
- 회원가입
- 로그인
- 게시판
- 쇼핑몰
- 관리자 페이지
- API 서버
등을 만들 때 많이 사용됩니다.
MySQL은 데이터를 저장하는 데이터베이스(DB)입니다.
예:
종류저장 데이터
| 회원 테이블 | 아이디, 비밀번호 |
| 게시판 테이블 | 제목, 내용 |
| 상품 테이블 | 상품명, 가격 |
| 주문 테이블 | 주문 정보 |
PHP는 데이터를 처리하고,
MySQL은 데이터를 저장합니다.
2장. 개발 환경 설치
XAMPP 설치
추천:
- Apache
- PHP
- MySQL
- phpMyAdmin
이 한 번에 설치됩니다.
공식 사이트:
https://www.apachefriends.org/
설치 후:
- Apache 시작
- MySQL 시작
브라우저:
http://localhost
접속되면 성공.
3장. PHP 기본 문법
PHP 시작
<?php
echo "Hello PHP";
?>
변수
<?php
$name = "홍길동";
$age = 20;
?>
배열
<?php
$colors = ["red", "blue", "green"];
echo $colors[0];
?>
반복문
<?php
for($i=0; $i<5; $i++) {
echo $i;
}
?>
4장. HTML Form과 PHP
입력 폼
<form method="post" action="save.php">
이름:
<input type="text" name="name">
<button type="submit">전송</button>
</form>
POST 받기
<?php
$name = $_POST['name'];
echo $name;
?>
5장. MySQL 기초
데이터베이스 생성
CREATE DATABASE myapp;
DB 사용
USE myapp;
테이블 생성
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
userid VARCHAR(50),
password VARCHAR(255),
name VARCHAR(100)
);
6장. PHP와 DB 연결
PDO 연결
<?php
$host = "localhost";
$dbname = "myapp";
$user = "root";
$pass = "";
try {
$pdo = new PDO(
"mysql:host=$host;dbname=$dbname;charset=utf8",
$user,
$pass
);
$pdo->setAttribute(
PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION
);
echo "연결 성공";
} catch(PDOException $e) {
die("DB 연결 실패");
}
7장. 데이터 추가 INSERT
<?php
require "db.php";
$sql = "
INSERT INTO users(userid, password, name)
VALUES(:userid, :password, :name)
";
$stmt = $pdo->prepare($sql);
$stmt->execute([
':userid' => 'test',
':password' => '1234',
':name' => '홍길동'
]);
8장. 데이터 조회 SELECT
<?php
require "db.php";
$sql = "SELECT * FROM users";
$stmt = $pdo->query($sql);
while($row = $stmt->fetch()) {
echo $row['userid'];
echo "<br>";
}
9장. 데이터 수정 UPDATE
<?php
$sql = "
UPDATE users
SET name = :name
WHERE id = :id
";
$stmt = $pdo->prepare($sql);
$stmt->execute([
':name' => '김철수',
':id' => 1
]);
10장. 데이터 삭제 DELETE
<?php
$sql = "DELETE FROM users WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute([
':id' => 1
]);
11장. 회원가입 만들기
회원가입 테이블
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
userid VARCHAR(50) UNIQUE,
password VARCHAR(255),
name VARCHAR(100),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
회원가입 폼
<form method="post" action="register.php">
아이디:
<input type="text" name="userid">
비밀번호:
<input type="password" name="password">
이름:
<input type="text" name="name">
<button type="submit">회원가입</button>
</form>
회원가입 처리
<?php
require "db.php";
$userid = $_POST['userid'];
$password = $_POST['password'];
$name = $_POST['name'];
$hash = password_hash($password, PASSWORD_DEFAULT);
$sql = "
INSERT INTO users(userid, password, name)
VALUES(:userid, :password, :name)
";
$stmt = $pdo->prepare($sql);
$stmt->execute([
':userid' => $userid,
':password' => $hash,
':name' => $name
]);
echo "회원가입 완료";
12장. 로그인 만들기
<?php
session_start();
require "db.php";
$userid = $_POST['userid'];
$password = $_POST['password'];
$sql = "SELECT * FROM users WHERE userid = :userid";
$stmt = $pdo->prepare($sql);
$stmt->execute([
':userid' => $userid
]);
$user = $stmt->fetch();
if($user) {
if(password_verify($password, $user['password'])) {
$_SESSION['userid'] = $user['userid'];
echo "로그인 성공";
} else {
echo "비밀번호 오류";
}
} else {
echo "사용자 없음";
}
13장. 게시판 만들기
게시판 테이블
CREATE TABLE posts (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
content TEXT,
writer VARCHAR(50),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
글쓰기
<?php
session_start();
require "db.php";
$sql = "
INSERT INTO posts(title, content, writer)
VALUES(:title, :content, :writer)
";
$stmt = $pdo->prepare($sql);
$stmt->execute([
':title' => $_POST['title'],
':content' => $_POST['content'],
':writer' => $_SESSION['userid']
]);
글 목록
<?php
$sql = "SELECT * FROM posts ORDER BY id DESC";
$stmt = $pdo->query($sql);
while($row = $stmt->fetch()) {
echo $row['title'];
echo "<br>";
}
14장. 메모장 프로젝트
메모 테이블
CREATE TABLE memos (
id INT AUTO_INCREMENT PRIMARY KEY,
content TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
메모 저장
<?php
require "db.php";
$content = $_POST['content'];
$sql = "
INSERT INTO memos(content)
VALUES(:content)
";
$stmt = $pdo->prepare($sql);
$stmt->execute([
':content' => $content
]);
15장. 쇼핑몰 구조 이해
쇼핑몰 핵심 구조:
상품
장바구니
주문
결제
상품 테이블
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
price INT,
stock INT
);
주문 테이블
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
userid VARCHAR(50),
total_price INT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
16장. 보안
SQL Injection 방지
잘못된 코드:
$sql = "SELECT * FROM users WHERE id=".$_GET['id'];
반드시 prepare 사용:
$sql = "SELECT * FROM users WHERE id=:id";
$stmt = $pdo->prepare($sql);
$stmt->execute([
':id' => $_GET['id']
]);
XSS 방지
echo htmlspecialchars($title);
17장. 파일 업로드
업로드 폼
<form method="post"
enctype="multipart/form-data"
action="upload.php">
<input type="file" name="image">
<button type="submit">업로드</button>
</form>
업로드 처리
<?php
$file = $_FILES['image'];
move_uploaded_file(
$file['tmp_name'],
"uploads/".$file['name']
);
18장. 세션(Session)
로그인 유지 기능.
<?php
session_start();
$_SESSION['userid'] = 'test';
19장. 추천 프로젝트
추천 순서:
- 메모장
- TODO 앱
- 회원가입
- 로그인
- 게시판
- 댓글
- 이미지 게시판
- 쇼핑몰
- REST API
- 관리자 페이지
20장. Laravel 입문
Laravel은 PHP 프레임워크입니다.
장점:
- 라우팅
- ORM
- 인증
- 보안
- API
- 템플릿
등이 매우 강력합니다.
공식 사이트:
https://laravel.com/
21장. 실무 팁
가장 중요한 것
반복해서 많이 만드는 것.
특히:
- CRUD
- 로그인
- 세션
- 파일 업로드
- DB 설계
를 많이 연습하면 실력이 빠르게 늘어납니다.
22장. 최종 학습 로드맵
HTML
→ CSS
→ JavaScript
→ PHP
→ MySQL
→ CRUD
→ 로그인
→ 게시판
→ 쇼핑몰
→ API
→ Laravel
→ 배포
부록. 자주 사용하는 SQL
전체 조회
SELECT * FROM users;
조건 조회
SELECT * FROM users
WHERE id = 1;
데이터 추가
INSERT INTO users(userid)
VALUES('test');
수정
UPDATE users
SET name='홍길동'
WHERE id=1;
삭제
DELETE FROM users
WHERE id=1;
마무리
PHP와 MySQL은 지금도 매우 강력한 웹 개발 조합입니다.
핵심은:
- 직접 만들기
- 작은 프로젝트 반복
- CRUD 익히기
- DB 설계 연습
입니다.
특히:
- 회원가입
- 로그인
- 게시판
- 메모장
- 쇼핑몰
을 직접 여러 번 만들어보면 웹 개발 구조가 자연스럽게 이해됩니다.
'Software > PHP' 카테고리의 다른 글
| PHP 기초 문법 #1 (0) | 2026.05.10 |
|---|---|
| PHP 시작하기 - Barcode128 (0) | 2024.08.08 |
| PHP 시작하기 - Barcode39 (0) | 2024.08.08 |
| PHP 소개 (0) | 2024.08.08 |
| PHP 시작하기 - curl이용 웹크롤링 (0) | 2024.07.02 |
