코딩 스쿨 PHP

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

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는 절차적 및 객체 지향 방식을 모두 지원하며, 준비된 문, 트랜잭션, 다중 쿼리 실행 등의 기능을 제공합니다. 이를 통해 데이터베이스 작업을 보다 안전하고 성능 좋게 처리할 수 있습니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com