
웹 개발 기초 – PHP 웹 프로그래밍 – 데이터베이스 연동 (MySQL, PostgreSQL 등)
안녕하세요! 😊
이번에는 웹 프로그래밍에서 가장 중요한 요소 중 하나인 데이터베이스 연동에 대해 다뤄볼게요.
웹사이트가 단순한 정보만 보여주는 정적인 페이지에서 벗어나려면, 데이터를 저장하고 불러올 수 있는 시스템이 필요하죠.
바로 그 역할을 해주는 게 데이터베이스, 그리고 그와 소통하는 중간다리가 PHP의 데이터베이스 연동 기능이에요!
비유하자면, PHP는 요리사이고 데이터베이스는 냉장고라고 생각해보세요.
요리사(PHP)가 음식을 만들기 위해 냉장고(MySQL, PostgreSQL 등)에서 재료(데이터)를 꺼내오거나 넣는 거죠! 🍲
데이터베이스란?
데이터베이스(DB)는 정보를 체계적으로 저장하고 관리할 수 있도록 해주는 소프트웨어예요.
PHP에서는 대표적으로 아래 두 가지를 많이 사용합니다:
- MySQL / MariaDB : 가장 널리 사용되는 오픈소스 관계형 데이터베이스
- PostgreSQL : 고급 기능이 많은 강력한 데이터베이스 시스템
1. MySQL(MariaDB) 연동하기
📌 1-1. 데이터베이스 연결
<?php
$host = "localhost";
$user = "root";
$password = "";
$dbname = "mydatabase";
$conn = mysqli_connect($host, $user, $password, $dbname);
if (!$conn) {
die("❌ 연결 실패: " . mysqli_connect_error());
}
echo "✅ MySQL 연결 성공!";
?>
💡 설명:
mysqli_connect()
: MySQL 서버에 연결localhost
: 현재 컴퓨터(로컬서버)라는 뜻root
: 기본 관리자 계정mydatabase
: 사용할 데이터베이스 이름
📌 1-2. 데이터 삽입하기 (INSERT)
<?php
$sql = "INSERT INTO users (username, email) VALUES ('홍길동', 'hong@example.com')";
if (mysqli_query($conn, $sql)) {
echo "✅ 새 레코드가 성공적으로 추가되었습니다!";
} else {
echo "❌ 오류: " . mysqli_error($conn);
}
?>
📌 1-3. 데이터 불러오기 (SELECT)
<?php
$sql = "SELECT * FROM users";
$result = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_assoc($result)) {
echo "이름: " . $row["username"] . " / 이메일: " . $row["email"] . "<br>";
}
?>
2. PostgreSQL 연동하기
PostgreSQL은 pg_connect()
함수로 연결합니다.
📌 2-1. PostgreSQL 연결하기
<?php
$conn = pg_connect("host=localhost dbname=mydb user=postgres password=mypass");
if (!$conn) {
die("❌ PostgreSQL 연결 실패!");
}
echo "✅ PostgreSQL 연결 성공!";
?>
📌 2-2. 데이터 삽입
<?php
$result = pg_query($conn, "INSERT INTO users (username, email) VALUES ('김철수', 'kim@example.com')");
if ($result) {
echo "✅ 삽입 성공!";
} else {
echo "❌ 오류 발생";
}
?>
📌 2-3. 데이터 조회
<?php
$result = pg_query($conn, "SELECT * FROM users");
while ($row = pg_fetch_assoc($result)) {
echo "이름: " . $row['username'] . " / 이메일: " . $row['email'] . "<br>";
}
?>
3. 사용자 입력 받아서 저장하기 (HTML + PHP)
📄 HTML 폼 예시
<form action="insert.php" method="post">
이름: <input type="text" name="username"><br>
이메일: <input type="email" name="email"><br>
<input type="submit" value="등록">
</form>
🧾 insert.php
<?php
$conn = mysqli_connect("localhost", "root", "", "mydatabase");
$username = $_POST['username'];
$email = $_POST['email'];
$sql = "INSERT INTO users (username, email) VALUES ('$username', '$email')";
if (mysqli_query($conn, $sql)) {
echo "✅ 입력 완료!";
} else {
echo "❌ 오류: " . mysqli_error($conn);
}
?>
4. SQL Injection 방지 (보안 강화)
사용자 입력을 바로 SQL에 넣으면 보안에 취약해요. 이를 SQL 인젝션(SQL Injection) 이라고 하죠.
이를 막기 위해서는 Prepared Statement (준비된 구문) 를 사용하는 것이 좋아요.
✅ 예: MySQL에서 준비된 구문 사용
<?php
$conn = mysqli_connect("localhost", "root", "", "mydatabase");
$stmt = mysqli_prepare($conn, "INSERT INTO users (username, email) VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, "ss", $username, $email);
$username = $_POST['username'];
$email = $_POST['email'];
mysqli_stmt_execute($stmt);
echo "✅ 안전하게 데이터가 저장되었습니다!";
?>
5. 데이터베이스 연동 흐름 요약
- 연결하기:
mysqli_connect()
또는pg_connect()
사용 - 쿼리 작성:
SELECT
,INSERT
,UPDATE
,DELETE
- 실행하기:
mysqli_query()
또는pg_query()
- 결과 처리:
mysqli_fetch_assoc()
등으로 결과 활용 - 보안 고려: SQL Injection 방지를 위한
prepare
구문 사용
🔍 주의해야 할 점 정리
항목 | 설명 |
---|---|
DB 연결 정보 | 비밀번호 노출 주의, 외부에 유출되지 않도록 설정 파일로 분리 |
SQL Injection | 사용자 입력은 반드시 필터링 또는 prepare 구문 사용 |
문자 인코딩 | UTF-8 설정 필수 (mysqli_set_charset() 사용 가능) |
에러 처리 | 예외 처리 및 디버깅을 위한 로그 설정 |
DB 접속 종료 | 작업이 끝나면 mysqli_close() 또는 pg_close() 로 연결 종료 |
마무리하며…
웹사이트가 ‘살아있는 정보’를 다루기 위해서는 반드시 데이터베이스 연동이 필요합니다.
PHP는 MySQL이든 PostgreSQL이든 아주 잘 지원하고 있어서 초보자도 금방 배울 수 있어요!
이제 간단한 회원가입, 게시판, 상품 리스트, 댓글 기능 등 다양한 기능도 직접 구현해보실 수 있을 거예요 😊
다음 시간에는 데이터를 수정(UPDATE) 하고 삭제(DELETE) 하는 기능까지 같이 다뤄볼게요!
행복한 코딩 하세요~ 🎉