현재 위치: > 최신 기사 목록> mysqli_result를 범용 데이터 액세스 계층으로 캡슐화하십시오

mysqli_result를 범용 데이터 액세스 계층으로 캡슐화하십시오

M66 2025-05-17

PHP 응용 프로그램을 개발할 때 MySQLI 확장은 MySQL 데이터베이스와 상호 작용하는 일반적인 방법입니다. 프로젝트가 계속 확장됨에 따라 MySQLI 기능을 직접 사용하면 코드의 복제, 높은 커플 링 및 유지 관리가 어려울 수 있습니다. 코드 재사용 성과 유지 관리를 향상시키기 위해 MySQLI_Result 함수를 공통 데이터 액세스 계층으로 캡슐화 할 수 있습니다.

이 기사는 MySQLI_RESULT 기능을 캡슐화하는 방법을 소개하고 효율적이고 관리하기 쉬운 데이터 액세스 계층을 구축하는 데 도움이되는 코드 예제를 제공합니다.

1. 데이터 액세스 계층의 설계 목표

데이터 액세스 계층의 목적은 데이터베이스 작업을 비즈니스 로직과 분리하여 데이터베이스의 액세스 로직이 응용 프로그램의 비즈니스 코드에 직접 나타나지 않도록하는 것입니다. 데이터베이스 작업을 캡슐화함으로써 코드의 재사용 성 및 유지 관리 가능성이 향상 될 수 있으며, 이후 단계에서 데이터베이스를 교체하기가 어려워 질 수 있습니다.

데이터 액세스 계층을 설계 할 때 고려해야 할 몇 가지 사항은 다음과 같습니다.

  • 데이터베이스 연결 캡슐화 : 데이터베이스를 작동 할 때마다 연결 코드의 반복 쓰기를 피하십시오.

  • 쿼리 결과 처리 단순화 : MySQLI_RESULT 및 프로세스 쿼리의 작동을 통합 방식으로 캡슐화하십시오.

  • CRUD 작업 지원 : 공통 추가, 삭제, 수정 및 점검 작업을 지원합니다.

  • 코드 재사용성 향상 : 캡슐화를 통해 데이터베이스 작동 코드 재사용 성이 높고 코드 중복성이 줄어 듭니다.

2. 데이터베이스 클래스를 만듭니다

먼저 데이터베이스의 연결 및 쿼리 작업을 관리하기 위해 데이터베이스 클래스를 작성해야합니다.

 class Database {
    private $connection;
    
    // 생성자는 데이터베이스 연결을 초기화합니다
    public function __construct($host, $user, $password, $dbname) {
        $this->connection = new mysqli($host, $user, $password, $dbname);
        
        if ($this->connection->connect_error) {
            die("연결이 실패했습니다: " . $this->connection->connect_error);
        }
    }

    // 쿼리를 실행하십시오,반환 결과 세트
    public function query($sql) {
        $result = $this->connection->query($sql);
        if (!$result) {
            die("쿼리가 실패했습니다: " . $this->connection->error);
        }
        return $result;
    }

    // 데이터베이스 연결을 닫습니다
    public function close() {
        $this->connection->close();
    }
}

위의 코드에서는 데이터베이스 연결을 초기화하기위한 생성자로 데이터베이스 클래스를 캡슐화하고 SQL 쿼리를 실행하고 결과 세트를 반환하기위한 쿼리 메소드를 캡슐화합니다.

3. mysqli_result 결과 세트를 캡슐화하십시오

mysqli_result는 쿼리 결과를 저장하는 데 사용되는 MySQLI 의 객체입니다. 데이터 액세스 계층을 빌드 할 때는 일반적으로 결과 세트의 작동을보다 간결하게 만들기 위해 MySQLI_RESULT를 캡슐화해야합니다.

다음은 mysqli_result를 캡슐화하는 방법에 대한 코드 예입니다.

 class DbResult {
    private $result;

    // 생성자는 쿼리 결과를 수신합니다
    public function __construct($result) {
        $this->result = $result;
    }

    // 모든 결과를 얻으십시오
    public function fetchAll() {
        $rows = [];
        while ($row = $this->result->fetch_assoc()) {
            $rows[] = $row;
        }
        return $rows;
    }

    // 단일 라인 결과를 얻으십시오
    public function fetchOne() {
        return $this->result->fetch_assoc();
    }

    // 행 수를 얻으십시오
    public function numRows() {
        return $this->result->num_rows;
    }
}

위의 코드에서 DBresult 클래스는 MySQLI_RESULT 객체를 캡슐화하고 다음 방법을 제공합니다.

  • fetchall () : 모든 쿼리 결과를 얻습니다.

  • fetchone () : 단일 쿼리 결과를 얻으십시오.

  • Numrows () : 쿼리 결과의 행 수를 반환합니다.

4. 데이터 액세스 계층 예제를 완료하십시오

데이터베이스 클래스와 결과 세트 캡슐화 클래스를 결합하여 다음과 같이 전체 데이터 액세스 계층을 만들 수 있습니다.

 class DataAccessLayer {
    private $db;

    // 생성자는 데이터베이스 연결을 초기화합니다
    public function __construct($host, $user, $password, $dbname) {
        $this->db = new Database($host, $user, $password, $dbname);
    }

    // 데이터를 쿼리하고 캡슐화 된 결과 세트를 반환하십시오
    public function fetchData($sql) {
        $result = $this->db->query($sql);
        $dbResult = new DbResult($result);
        return $dbResult;
    }

    // 데이터 삽입
    public function insertData($sql) {
        return $this->db->query($sql);
    }

    // 데이터 업데이트
    public function updateData($sql) {
        return $this->db->query($sql);
    }

    // 데이터 삭제
    public function deleteData($sql) {
        return $this->db->query($sql);
    }

    // 연결을 닫으십시오
    public function close() {
        $this->db->close();
    }
}

이 예에서 DataAccessLayer 클래스는 쿼리, 삽입, 업데이트 및 삭제와 같은 일반적인 데이터베이스 작업을 캡슐화합니다. 우리는 dbresult 클래스를 사용하여 쿼리 결과를 캡슐화하여 결과의 ​​작동을보다 편리하게 만듭니다.

5. 데이터 액세스 계층을 사용하십시오

이제 비즈니스 코드에서 캡슐화 된 데이터 액세스 계층을 사용할 수 있습니다.

 // 데이터베이스 액세스 개체를 만듭니다
$dal = new DataAccessLayer('localhost', 'root', '', 'test_db');

// 쿼리 데이터
$sql = "SELECT * FROM users";
$dbResult = $dal->fetchData($sql);

// 쿼리 결과를 얻으십시오
$users = $dbResult->fetchAll();
foreach ($users as $user) {
    echo $user['username'] . "<br>";
}

// 데이터베이스 연결을 닫습니다
$dal->close();

이러한 방식으로 각 페이지에서 연결, 쿼리 결과 처리 등과 같은 논리를 반복적으로 작성하지 않고도 데이터베이스 작업을 쉽게 수행 할 수 있습니다.

6. 요약

mysqli_result 결과 세트 및 데이터베이스 연결을 캡슐화하여 공통 데이터 액세스 계층을 만듭니다. 이 데이터 액세스 계층은 데이터베이스 작업을보다 간결하고 재사용 가능하며 코드의 유지 관리 가능성을 향상시킵니다. 비즈니스 요구에 따라이 데이터 액세스 계층을 더 확장하고 트랜잭션 관리, 배치 삽입 등과 같은 더 많은 데이터베이스 작업을 지원할 수 있습니다.

데이터베이스 연결을보다 유연하게 관리하려면 데이터베이스 연결을 여러 번 생성하지 않도록 싱글 톤 패턴을 소개 할 수 있습니다.

이 기사가보다 효율적이고 유지 관리 가능한 데이터베이스 운영 계층을 구축하고 개발 효율성을 향상시키는 데 도움이되기를 바랍니다.