학습
PHP PHP와 MySQL 연동
PHP PHP와 MySQL 연동 — 중급
PHP와 MySQL 연동
1. 도입 (왜 배워야 하는가)
PHP와 MySQL은 웹 애플리케이션 개발의 핵심적인 조합입니다. PHP는 서버 사이드 스크립트 언어로, 동적인 웹 페이지를 생성하는 데 사용되며, MySQL은 데이터베이스 관리 시스템으로 데이터를 저장하고 관리하는 역할을 합니다. 이 둘을 연동하는 기술을 배우는 것은 웹 개발에서 필수적입니다.
실무에서는 사용자의 정보를 저장하고, 상품 정보를 관리하며, 다양한 데이터를 처리해야 합니다. 만약 이 연동을 이해하지 못한다면, 데이터베이스에서 정보를 가져오거나 저장하는 것이 불가능해져 애플리케이션의 기능이 제한될 수 있습니다. 예를 들어, 쇼핑몰 사이트에서 사용자가 장바구니에 상품을 추가하거나 주문을 하는 기능을 구현하지 못하게 될 것입니다.
2. 핵심 개념 설명
PHP와 MySQL 연동 개념
- PHP: 서버에서 실행되는 스크립트 언어로, HTML 코드와 함께 동적인 웹 페이지를 생성합니다.
- MySQL: 관계형 데이터베이스 관리 시스템(RDBMS)으로, 데이터를 테이블 형태로 저장하고, SQL 쿼리를 통해 데이터를 조작합니다.
비유
PHP는 요리사와 같고, MySQL은 주방입니다. 요리사는 요리(웹 페이지 생성)를 위해 다양한 재료(데이터)를 주방에서 가져오고 조리합니다. 주방이 정리되어 있지 않다면, 요리사는 필요한 재료를 찾지 못해 요리를 제대로 할 수 없습니다.
| 용어 | 정의 |
|---|---|
| CRUD | Create, Read, Update, Delete의 약어로, 데이터의 기본적인 조작을 의미합니다. |
| SQL | Structure Query Language, 데이터베이스와 상호작용하는 데 사용되는 언어입니다. |
| PDO | PHP Data Objects, 데이터베이스 접속을 위한 PHP의 확장 모듈입니다. |
3. 기본 코드 예제
아래의 코드는 MySQL 데이터베이스에 연결하고 데이터를 가져오는 기본적인 방법을 보여줍니다.
<?php
// 데이터베이스 연결 정보
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";
// 데이터베이스 연결
$conn = new mysqli($servername, $username, $password, $dbname);
// 연결 체크
if ($conn->connect_error) {
die("연결 실패: " . $conn->connect_error);
}
// 데이터 조회 쿼리
$sql = "SELECT id, name FROM users";
$result = $conn->query($sql);
// 결과 처리
if ($result->num_rows > 0) {
// 각 행 출력
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. "<br>";
}
} else {
echo "결과가 없습니다.";
}
// 연결 종료
$conn->close();
?>
실행 결과
id: 1 - Name: 홍길동
id: 2 - Name: 김철수
코드 설명
$servername,$username,$password,$dbname변수를 설정하여 데이터베이스 접속 정보를 준비합니다.new mysqli(...)를 사용하여 데이터베이스에 연결합니다.- 연결이 실패하면 오류 메시지를 출력하고 스크립트를 종료합니다.
SELECT쿼리를 사용하여users테이블에서 데이터를 조회합니다.- 결과가 존재하면
while루프를 통해 각 행을 출력합니다. - 마지막으로
close()메소드를 사용하여 데이터베이스 연결을 종료합니다. - PHP와 MySQL의 연동은 웹 애플리케이션 개발의 필수 기술입니다.
- 데이터베이스와의 상호작용을 위해 SQL 쿼리를 이해하고 사용하는 것이 중요합니다.
- 보안을 위해 Prepared Statements를 사용하는 것이 좋습니다.
- PDO를 통한 데이터베이스 연결과 쿼리 실행
- MySQL 데이터베이스의 구조 설계 및 최적화
- RESTful API 설계 및 PHP로 구현하기
4. 실전 활용 예제
예제 1: 사용자 등록
쇼핑몰의 사용자 등록 페이지에서, 사용자가 입력한 정보를 데이터베이스에 저장하는 예제입니다.
<?php
// 사용자 입력
$name = "이순신";
$email = "[email protected]";
// 데이터베이스 연결
$conn = new mysqli($servername, $username, $password, $dbname);
// 오류 체크
if ($conn->connect_error) {
die("연결 실패: " . $conn->connect_error);
}
// 데이터 삽입 쿼리
$sql = "INSERT INTO users (name, email) VALUES ('$name', '$email')";
if ($conn->query($sql) === TRUE) {
echo "새로운 레코드가 생성되었습니다.";
} else {
echo "오류: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>
예제 2: 상품 조회
쇼핑몰에서 상품 목록을 보여주는 페이지 구현 예제입니다.
<?php
// 데이터베이스 연결
$conn = new mysqli($servername, $username, $password, $dbname);
// 오류 체크
if ($conn->connect_error) {
die("연결 실패: " . $conn->connect_error);
}
// 데이터 조회 쿼리
$sql = "SELECT id, product_name, price FROM products";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "상품 ID: " . $row["id"]. " - 상품명: " . $row["product_name"]. " - 가격: " . $row["price"]. "<br>";
}
} else {
echo "상품이 없습니다.";
}
$conn->close();
?>
5. 흔한 실수와 주의사항
실수 1: SQL 인젝션
SQL 쿼리에 직접 사용자 입력값을 넣는 것은 보안상 매우 위험합니다.
잘못된 코드
$sql = "INSERT INTO users (name, email) VALUES ('$name', '$email')";
올바른 코드 (Prepared Statements 사용)
$stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $email);
$stmt->execute();
실수 2: 데이터베이스 연결 해제 누락
연결을 해제하지 않으면 메모리 누수가 발생할 수 있습니다.
잘못된 코드
// 연결 해제 없음
올바른 코드
$conn->close(); // 연결 해제