PHP MySQLi
PHP MySQLi 참조: PHP에서 MySQL 데이터베이스 처리 가이드
PHP MySQLi(MySQL Improved)는 PHP에서 MySQL 데이터베이스와 상호작용하기 위한 확장 모듈입니다. MySQLi는 이전 mysql
확장을 대체하며, 객체 지향 및 절차적 접근 방식을 모두 지원합니다. 또한, MySQLi는 보안과 성능을 개선한 준비된 문장(Prepared Statements)과 다중 쿼리 처리 기능을 제공합니다. 이
가이드는 MySQLi의 주요 기능과 예제를 제공하여 PHP 개발자가 데이터베이스 작업을 효율적으로 처리할 수 있도록 돕습니다.
1. MySQLi 연결 및 해제
1.1 데이터베이스 연결
MySQLi로 MySQL 데이터베이스에 연결하려면 mysqli_connect()
또는 객체 지향 방식을 사용하여 연결할 수 있습니다.
-
절차적 방법:
<?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "testdb"; // 데이터베이스 연결 $conn = mysqli_connect($servername, $username, $password, $dbname); // 연결 확인 if (!$conn) { die("연결 실패: " . mysqli_connect_error()); } echo "연결 성공!"; ?>
-
객체 지향 방법:
<?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "testdb"; // MySQLi 객체 생성 및 연결 $conn = new mysqli($servername, $username, $password, $dbname); // 연결 확인 if ($conn->connect_error) { die("연결 실패: " . $conn->connect_error); } echo "연결 성공!"; ?>
1.2 연결 해제
데이터베이스 연결을 종료하려면 mysqli_close()
함수를 사용하거나 객체의 close()
메서드를 호출합니다.
-
절차적 방법:
<?php mysqli_close($conn); ?>
-
객체 지향 방법:
<?php $conn->close(); ?>
2. 데이터베이스 생성 및 테이블 생성
2.1 데이터베이스 생성
PHP에서 MySQLi를 사용하여 데이터베이스를 생성할 수 있습니다.
-
예시:
<?php $conn = new mysqli($servername, $username, $password); // 데이터베이스 생성 쿼리 $sql = "CREATE DATABASE myDB"; if ($conn->query($sql) === TRUE) { echo "데이터베이스가 성공적으로 생성되었습니다."; } else { echo "데이터베이스 생성 실패: " . $conn->error; } $conn->close(); ?>
2.2 테이블 생성
데이터베이스 내에서 테이블을 생성할 수 있습니다.
-
예시:
<?php $conn = new mysqli($servername, $username, $password, $dbname); // 테이블 생성 쿼리 $sql = "CREATE TABLE Users ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(30) NOT NULL, email VARCHAR(50), reg_date TIMESTAMP )"; if ($conn->query($sql) === TRUE) { echo "테이블이 성공적으로 생성되었습니다."; } else { echo "테이블 생성 실패: " . $conn->error; } $conn->close(); ?>
3. 데이터 삽입
3.1 단일 레코드 삽입
데이터를 MySQL 테이블에 삽입할 수 있습니다.
-
예시:
<?php $sql = "INSERT INTO Users (username, email) VALUES ('JohnDoe', 'john@example.com')"; if ($conn->query($sql) === TRUE) { echo "새 레코드가 성공적으로 삽입되었습니다."; } else { echo "오류: " . $sql . "<br>" . $conn->error; } ?>
3.2 여러 레코드 삽입
한 번에 여러 레코드를 삽입할 수도 있습니다.
-
예시:
<?php $sql = "INSERT INTO Users (username, email) VALUES ('Alice', 'alice@example.com'), ('Bob', 'bob@example.com'), ('Charlie', 'charlie@example.com')"; if ($conn->multi_query($sql) === TRUE) { echo "레코드가 성공적으로 삽입되었습니다."; } else { echo "오류: " . $sql . "<br>" . $conn->error; } ?>
4. 데이터 조회
4.1 기본 데이터 조회
테이블에서 데이터를 조회할 수 있습니다.
-
예시:
<?php $sql = "SELECT id, username, email FROM Users"; $result = $conn->query($sql); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - 이름: " . $row["username"]. " - 이메일: " . $row["email"]. "<br>"; } } else { echo "결과가 없습니다."; } ?>
4.2 조건부 데이터 조회 (WHERE
절)
특정 조건을 사용하여 데이터를 필터링할 수 있습니다.
-
예시:
<?php $sql = "SELECT id, username, email FROM Users WHERE username = 'JohnDoe'"; $result = $conn->query($sql); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - 이름: " . $row["username"]. " - 이메일: " . $row["email"]. "<br>"; } } else { echo "결과가 없습니다."; } ?>
5. 데이터 업데이트
테이블에서 데이터를 업데이트할 수 있습니다.
-
예시:
<?php $sql = "UPDATE Users SET email = 'newemail@example.com' WHERE username = 'JohnDoe'"; if ($conn->query($sql) === TRUE) { echo "레코드가 성공적으로 업데이트되었습니다."; } else { echo "업데이트 오류: " . $conn->error; } ?>
6. 데이터 삭제
테이블에서 데이터를 삭제할 수 있습니다.
-
예시:
<?php $sql = "DELETE FROM Users WHERE id = 1"; if ($conn->query($sql) === TRUE) { echo "레코드가 성공적으로 삭제되었습니다."; } else { echo "삭제 오류: " . $conn->error; } ?>
7. 준비된 문 (Prepared Statements)
준비된 문은 SQL 인젝션을 방지하고 더 효율적인 쿼리를 실행하는 방법입니다.
7.1 준비된 문을 사용한 데이터 삽입
-
예시:
<?php $stmt = $conn->prepare("INSERT INTO Users (username, email) VALUES (?, ?)"); $stmt->bind_param("ss", $username, $email); $username = "David"; $email = "david@example.com"; $stmt->execute(); echo "레코드가 성공적으로 삽입되었습니다."; $stmt->close(); ?>
7.2 준비된 문을 사용한 데이터 조회
-
예시:
<?php $stmt = $conn->prepare("SELECT id, username, email FROM Users WHERE username = ?"); $stmt->bind_param("s", $username); $username = "JohnDoe"; $stmt->execute(); $stmt->bind_result($id, $username, $email); while ($stmt->fetch()) { echo "id: $id - 이름: $username - 이메일: $email<br>"; } $stmt->close(); ?>
8. 트랜잭션 처리
트랜잭션은 여러 SQL 명령을 하나의 작업으로 처리하며, 모든 명령이 성공해야만 데이터가 실제로 반영됩니다.
-
예시:
<?php $conn->begin_transaction(); try { $conn->query("UPDATE Users SET email = 'newemail1@example.com' WHERE id = 1"); $conn->query("UPDATE Users SET email = 'newemail2@example.com' WHERE id = 2"); // 모든 작업이 성공하면 커밋 $conn->commit(); echo "트랜잭션 성공!"; } catch (Exception $e)
{ // 오류가 발생하면 롤백 $conn->rollback(); echo "트랜잭션 실패: " . $e->getMessage(); } ?>
---
### 9. 다중 쿼리 실행
`multi_query()`를 사용하여 여러 쿼리를 한 번에 실행할 수 있습니다.
- **예시**:
```php
<?php
$sql = "INSERT INTO Users (username, email) VALUES ('Tom', 'tom@example.com');";
$sql .= "INSERT INTO Users (username, email) VALUES ('Jerry', 'jerry@example.com');";
if ($conn->multi_query($sql) === TRUE) {
echo "여러 레코드가 성공적으로 삽입되었습니다.";
} else {
echo "오류: " . $conn->error;
}
?>
요약
PHP MySQLi는 PHP와 MySQL 데이터베이스 간의 효율적이고 안전한 상호작용을 가능하게 합니다. MySQLi는 절차적 및 객체 지향 방식을 모두 지원하며, 준비된 문, 트랜잭션, 다중 쿼리 실행 등의 기능을 제공합니다. 이를 통해 데이터베이스 작업을 보다 안전하고 성능 좋게 처리할 수 있습니다.