
고급 PHP 프로그래밍 – 데이터베이스 프로그래밍 – 데이터 조회와 조작
안녕하세요! 😊
이번 시간에는 PHP에서 MySQL 데이터베이스에 저장된 데이터를 조회하고 조작하는 방법에 대해 자세히 알아보겠습니다.
데이터베이스에 연결하고, SQL 쿼리를 실행할 수 있게 되셨다면 이제는 본격적으로 데이터를 꺼내서 보여주고, 수정하고, 삭제하는 것까지 해봐야겠죠?
이 과정을 통해 웹사이트에 실제로 동적 콘텐츠를 보여주는 기술의 핵심을 익히게 됩니다.
게시판, 회원 목록, 상품 리스트, 댓글 등 거의 모든 기능은 바로 이 “조회와 조작”에서 출발해요!
1. 데이터 조회: SELECT
✅ 기본 형식
SELECT 컬럼명1, 컬럼명2 FROM 테이블명 WHERE 조건;
✅ PHP에서 사용 예시
$conn = mysqli_connect("localhost", "root", "1234", "test_db");
$sql = "SELECT id, username, email FROM users";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
echo "🧍 ID: " . $row['id'] . ", 이름: " . $row['username'] . ", 이메일: " . $row['email'] . "<br>";
}
} else {
echo "🙁 데이터가 없습니다.";
}
📌 참고 함수
함수 | 설명 |
---|---|
mysqli_fetch_assoc() |
연관 배열로 결과 반환 |
mysqli_num_rows() |
결과 행 수 확인 |
2. 조건부 조회
🧪 예제: 특정 이름 검색
$name = "홍길동";
$sql = "SELECT * FROM users WHERE username = '$name'";
⚠️ 직접 문자열 연결은 위험! (SQL Injection 발생 가능)
→ prepare()
와 bind_param()
을 사용하세요.
✅ Prepared Statement 활용
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $name);
$name = "홍길동";
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo "🔍 찾은 사용자: " . $row['username'] . "<br>";
}
3. 데이터 정렬과 제한
✅ 정렬: ORDER BY
$sql = "SELECT * FROM users ORDER BY id DESC";
✅ 개수 제한: LIMIT
$sql = "SELECT * FROM users ORDER BY id DESC LIMIT 10";
→ 최근 10개의 데이터만 가져오기
4. 데이터 삽입: INSERT
✅ 기본 SQL 문
INSERT INTO users (username, email) VALUES ('홍길동', 'hong@example.com');
✅ PHP 실행 예시
$sql = "INSERT INTO users (username, email) VALUES (?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ss", $username, $email);
$username = "홍길동";
$email = "hong@example.com";
$stmt->execute();
echo "✅ 삽입된 ID: " . $stmt->insert_id;
insert_id
는 마지막으로 삽입된 데이터의 고유번호(ID)를 반환합니다.
5. 데이터 수정: UPDATE
✅ 기본 SQL 문
UPDATE users SET email = 'new@example.com' WHERE username = '홍길동';
✅ PHP 예시
$sql = "UPDATE users SET email = ? WHERE username = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ss", $new_email, $username);
$new_email = "gil@example.com";
$username = "홍길동";
$stmt->execute();
echo "✏️ 수정된 행 수: " . $stmt->affected_rows;
6. 데이터 삭제: DELETE
✅ 기본 SQL 문
DELETE FROM users WHERE id = 3;
✅ PHP 예시
$sql = "DELETE FROM users WHERE id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $id);
$id = 3;
$stmt->execute();
echo "🗑️ 삭제된 행 수: " . $stmt->affected_rows;
7. 데이터 집계: COUNT
, AVG
, SUM
, GROUP BY
🧪 예제: 총 사용자 수 구하기
$sql = "SELECT COUNT(*) AS total FROM users";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
echo "총 사용자 수: " . $row['total'];
8. HTML 테이블로 데이터 출력
🧪 예제: 조회 결과 테이블로 출력
$sql = "SELECT * FROM users";
$result = mysqli_query($conn, $sql);
echo "<table border='1'>";
echo "<tr><th>ID</th><th>이름</th><th>이메일</th></tr>";
while ($row = mysqli_fetch_assoc($result)) {
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['username'] . "</td>";
echo "<td>" . $row['email'] . "</td>";
echo "</tr>";
}
echo "</table>";
→ 이 코드를 이용하면 간단한 회원 목록 페이지도 뚝딱 만들 수 있어요!
🔐 보안을 위한 팁
항목 | 설명 |
---|---|
Prepared Statement | 모든 사용자 입력은 반드시 준비된 구문으로 처리 |
입력값 검증 | filter_input() 또는 htmlspecialchars() 로 필터링 |
에러 처리 | try-catch 또는 mysqli_error() 로 예외 처리 |
출력 이스케이프 | XSS 방지용 htmlspecialchars() 사용 필수 |
정리 요약
기능 | 방법 |
---|---|
데이터 조회 | SELECT , mysqli_fetch_assoc() |
데이터 삽입 | INSERT , bind_param() |
데이터 수정 | UPDATE , affected_rows |
데이터 삭제 | DELETE , bind_param() |
결과 수 확인 | mysqli_num_rows() , COUNT(*) |
보안 필수 | Prepared Statement + 필터링 처리 |
마무리하며 😊
이제 여러분은 PHP를 이용해 데이터베이스에서 데이터를 읽고, 추가하고, 수정하고, 삭제하는 완전한 흐름을 익히셨어요!
이 기능들이 바로 게시판, 회원 관리, 쇼핑몰 등의 기능을 구성하는 핵심 기술이랍니다.
다음 시간에는 트랜잭션(TRANSACTION), 즉 여러 쿼리를 안전하게 묶어 처리하는 방법에 대해 배워보겠습니다.
실수 없는 데이터 처리, 더욱 깊이 있는 프로그래밍을 향해 한 걸음 더 나아가요! 🚀
오늘도 수고 많으셨습니다. 💻📊✨