PHP에서 데이터베이스 작업에 PDO (PHP 데이터 객체)를 사용하는 것은 매우 일반적인 방법입니다. PDO가 제공 한 API를 통해 데이터베이스 연결, 쿼리 및 작업을 쉽게 수행 할 수 있습니다. 데이터 쿼리를 수행 할 때 Pagination 쿼리는 매우 일반적인 요구 사항입니다. 이 기사에서는 PDOSTATEMENT :: ROWCOUNT를 사용하여 Pagination Query 기능을 구현하는 방법을 소개합니다.
PDO에서 PDOSTATEMENT :: ROWCOUNT 메소드는 현재 SQL 쿼리의 영향을받는 행의 수를 반환합니다. Select Queries의 경우 RowCount는 쿼리 결과의 행 수를 반환하는 반면, 삽입 , 업데이트 또는 삭제 의 경우 영향을받는 행 수를 반환합니다.
페이징 쿼리의 경우 일반적으로 총 페이지 수를 계산하기 위해 쿼리 조건을 충족하는 데이터베이스의 총 레코드 수를 알아야합니다. pdostatement :: RowCount는 총 레코드 수를 얻는 간단한 방법입니다.
페이지 매김 쿼리의 기본 아이디어는 다음과 같습니다. 한계 및 오프셋을 통해 쿼리의 레코드 범위를 제어하고 RowCount를 사용하여 조건을 충족하는 총 레코드 수를 얻으므로 총 페이지 수를 계산하는 것입니다. 이는 데이터의 배치로드를 실현하여 한 번에 많은 양의 데이터를로드하는 오버 헤드를 줄일 수 있습니다.
페이지 매김 쿼리의 일반적인 단계는 다음과 같습니다.
총 레코드 수를 얻으십시오 : 조건을 충족하는 총 레코드 수를 쿼리하고 pdostatement :: RowCount를 사용하여 레코드 수를 얻습니다.
총 페이지 수 계산 : 총 레코드 수와 각 페이지에 표시된 레코드 수를 기준으로 총 페이지 수를 계산하십시오.
현재 페이지 데이터 가져 오기 : 제한 및 오프셋을 사용하여 현재 페이지 번호와 페이지 당 표시되는 레코드 수를 기반으로 현재 페이지 데이터를 얻으십시오.
아래는 간단한 페이징 쿼리 구현 예입니다. 사용자의 기본 정보가 포함 된 데이터베이스 테이블 사용자 가 있다고 가정합니다. PDOSTATEMENT :: ROWCOUNT를 사용하여 총 레코드 수를 얻고 페이지 매김 쿼리를 통해 데이터를로드합니다.
<?php
// 데이터베이스 연결 설정
$host = 'localhost';
$dbname = 'your_database';
$username = 'root';
$password = '';
// 만들다 PDO 예
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
exit;
}
// 현재 페이지 번호를 얻으십시오,기본값은 첫 페이지입니다
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$limit = 10; // 페이지 당 표시됩니다 10 기록
$offset = ($page - 1) * $limit; // 오프셋을 계산합니다
// 총 레코드 수를 얻으십시오
$stmt = $pdo->query("SELECT COUNT(*) FROM users");
$totalRecords = $stmt->fetchColumn(); // 사용 rowCount 총 레코드 수를 얻으십시오
$totalPages = ceil($totalRecords / $limit); // 총 페이지 수를 계산하십시오
// 현재 페이지의 데이터를 가져옵니다
$stmt = $pdo->prepare("SELECT * FROM users LIMIT :limit OFFSET :offset");
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
// 현재 페이지의 출력 데이터
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo 'ID: ' . $row['id'] . ' | Name: ' . $row['name'] . '<br>';
}
// 출력 페이징 정보
echo "<br>Page $page of $totalPages<br>";
// 출력 페이징 링크
if ($page > 1) {
echo '<a href="?page=' . ($page - 1) . '">Previous</a> ';
}
if ($page < $totalPages) {
echo '<a href="?page=' . ($page + 1) . '">Next</a>';
}
?>
데이터베이스 연결 : PDO를 통해 데이터베이스 연결을 만듭니다.
총 레코드 수를 얻으십시오 . 먼저, 사용자의 Select Count (*)를 통해 데이터베이스의 총 레코드 수를 쿼리 한 다음 FetchColumn ()을 사용하여 결과의 첫 번째 필드 (즉, 총 레코드 수)를 얻으십시오.
페이징 계산 : 현재 페이지 번호 $ 페이지 와 페이지 $ 한도 당 표시되는 레코드 수를 기반으로 오프셋 $ 오프셋을 계산합니다. 총 페이지 수는 Ceil () 함수에 의해 계산됩니다.
현재 페이지의 데이터를 쿼리하십시오 . 한계 및 오프셋을 통해 현재 페이지의 데이터를 쿼리하십시오.
페이지 출력 : PAGED 링크는 총 페이지 수에 따라 출력입니다. 사용자는 링크를 클릭하여 이전 페이지 또는 다음 페이지로 이동할 수 있습니다.
성능 최적화 : 데이터 볼륨이 큰 경우 RowCount를 사용하여 총 레코드 수를 얻는 것이 성능에 영향을 줄 수 있습니다. 데이터 테이블이 매우 크면 필요한 데이터 만 쿼리하고 캐시 사용과 같은 다른 최적화 솔루션을 사용하는 것을 고려할 수 있습니다.
SQL 주입 방지 : 위의 코드에서, 우리는 SQL 주입의 위험을 피하기 위해 준비 및 bindparam을 통해 SQL 쿼리를 전제로 제공합니다.