현재 위치: > 최신 기사 목록> PDOSTATEMENT :: FETCHOBJECT를 사용하여 페이지 매김 쿼리에 대한 객체 데이터를 얻으십시오

PDOSTATEMENT :: FETCHOBJECT를 사용하여 페이지 매김 쿼리에 대한 객체 데이터를 얻으십시오

gitbox 2025-05-12

매일 개발에서 우리는 종종 데이터베이스를 페이지를 Paginate하고 결과를 객체로 반환해야 할 필요성을 겪습니다. PHP의 PDO 확장은이를 수행하는 매우 편리한 방법을 제공합니다. 여기서 pdostatement :: FetchObject 메서드는 쿼리 결과를 객체에 직접 매핑하는 데 특히 적합합니다.

이 기사는 FetchObject 와 함께 페이징 쿼리를 구현하는 방법을 보여주고 객체 데이터를 올바르게 처리하는 방법을 보여줍니다.

환경 준비

먼저 환경에 PDO 확장 기능이 활성화되고 데이터베이스가 연결되어 있는지 확인하십시오. 예를 들어:

 <?php
$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8mb4';
$username = 'dbuser';
$password = 'dbpass';

try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die('데이터베이스 연결이 실패했습니다: ' . $e->getMessage());
}
?>

페이징 쿼리 디자인

페이징의 경우 제한오프셋을 설정해야합니다. 사용자 테이블의 데이터를 쿼리하려고한다고 가정하고 페이지 당 5 개의 레코드가 표시됩니다.

 <?php
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$page = max($page, 1); // 가장 작은 것은입니다1페이지
$pageSize = 5;
$offset = ($page - 1) * $pageSize;

$sql = 'SELECT id, username, email FROM users ORDER BY id ASC LIMIT :limit OFFSET :offset';
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':limit', $pageSize, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
?>

FetchObject를 사용하여 개체 목록을 가져옵니다

다음으로, 결과를 FetchObject 메소드를 통해 라인별로 객체에 매핑합니다. 클래스를 사용자 정의하거나 PHP의 내장 STDClass를 직접 사용할 수 있습니다.

예제는 stdclass를 사용합니다.

 <?php
$users = [];

while ($user = $stmt->fetchObject()) {
    $users[] = $user;
}

// 객체 배열을 인쇄하십시오
foreach ($users as $user) {
    echo 'ID: ' . $user->id . '<br>';
    echo '사용자 이름: ' . htmlspecialchars($user->username, ENT_QUOTES, 'UTF-8') . '<br>';
    echo '우편: ' . htmlspecialchars($user->email, ENT_QUOTES, 'UTF-8') . '<br><br>';
}
?>

사용자 정의 사용자 클래스를 사용하려면 이와 같이 정의하고 다음을 전달할 수 있습니다.

 <?php
class User
{
    public $id;
    public $username;
    public $email;

    public function getProfileUrl()
    {
        return 'https://gitbox.net/user/profile.php?id=' . urlencode($this->id);
    }
}

$users = [];

while ($user = $stmt->fetchObject(User::class)) {
    $users[] = $user;
}

// 객체 배열을 인쇄하십시오
foreach ($users as $user) {
    echo 'ID: ' . $user->id . '<br>';
    echo '사용자 이름: ' . htmlspecialchars($user->username, ENT_QUOTES, 'UTF-8') . '<br>';
    echo '우편: ' . htmlspecialchars($user->email, ENT_QUOTES, 'UTF-8') . '<br>';
    echo '프로필 링크: <a href="' . htmlspecialchars($user->getProfileUrl(), ENT_QUOTES, 'UTF-8') . '">확인하다</a><br><br>';
}
?>

FetchObject 메소드는 지정한 클래스를 직접 인스턴스화하고 속성에 값을 자동으로 할당 할 수 있으며, 이는 위의 getProfileUrl 과 같은 캡슐화 동작이 필요한 방법에 매우 적합합니다.

요약

pdostatement :: FetchObject를 사용하면 데이터베이스 레코드를 매우 우아하게 객체에 매핑 할 수 있습니다. 특히 객체 지향 응용 프로그램 개발에 적합합니다. 페이징 쿼리와 결합하면 SQL 문에 한계오프셋 만 추가 한 다음 FetchObject를 사용하여 하나씩 얻을 수 있습니다.

MVC 프레임 워크 또는 백엔드 관리 시스템을 구축하는 경우이 방법을 사용하면 코드가 더 간결하고 유지 관리 가능합니다.