현재 위치: > 최신 기사 목록> next_result () 페이징과 정렬을 결합한 고급 시나리오

next_result () 페이징과 정렬을 결합한 고급 시나리오

gitbox 2025-05-06

PHP를 사용하여 MySQL 데이터베이스를 조작 할 때는 일반적으로 MySQLI 확장을 사용하여 여러 SQL 문을 실행합니다. 이 다중 상태 쿼리 시나리오에서 Next_result () 는 개발자가 각 쿼리의 결과 세트에 점차 액세스 할 수있는 매우 중요한 기능입니다. 이 기본 기능 외에도 Next_result ()는 일부 복잡한 시나리오에서 페이징 및 정렬과 같은 고급 기능을 구현하는 데 도움이 될 수 있습니다.

이 기사는 실제 코드 예제를 결합하여 Pagination and Sorting에서 Next_result ()를 사용하는 방법을 보여줍니다. 특히 단일 요청을 통해 여러 데이터 조각을 완료하려는 경우.

next_result () 란 무엇입니까?

next_result ()MySQLI 객체의 여러 문을 포함하는 쿼리 결과를 처리하는 데 사용되는 메소드입니다. 여러 SQL을 실행할 때 첫 번째 결과 세트는 store_result () 또는 use_result () 를 통해 얻어지고 다음 _result () 는 다음 결과 세트로 이동하는 데 사용됩니다.

기본 구문 :

 $mysqli->next_result();

다음 _result ()를 사용하여 페이징 및 정렬을 구현하는 이유는 무엇입니까?

대부분의 응용 분야에서 페이징 및 정렬은 일반적으로 데이터베이스에 제한주문이 있는 SQL 쿼리를 보내면 수행됩니다. 그러나 때로는 성능을 향상 시키거나 클라이언트와 데이터베이스 간의 상호 작용 수를 줄이기 위해 여러 쿼리를 한 번에 보내고 여러 PAGED 데이터 블록 또는 한 번에 다른 정렬 된 결과를 얻을 수 있습니다. 다음은 Next_result ()가 유용 할 수있는 곳입니다.

예 : 한 번의 요청으로 페이징 데이터 및 총 레코드 받기

사용자 목록을 예로 들어 보겠습니다.

  1. 현재 페이지의 데이터 (정렬);

  2. 총 레코드 (Pagination Navigation).

 <?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
    die("연결이 실패했습니다: " . $mysqli->connect_error);
}

$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$pageSize = 10;
$offset = ($page - 1) * $pageSize;
$sortColumn = isset($_GET['sort']) ? $_GET['sort'] : 'created_at';
$sortOrder = (isset($_GET['order']) && strtolower($_GET['order']) === 'asc') ? 'ASC' : 'DESC';

// 알아채다SQL주입,여기에서 처리를 단순화하십시오
$sql = "
    SELECT id, username, email, created_at 
    FROM users 
    ORDER BY $sortColumn $sortOrder 
    LIMIT $offset, $pageSize;
    
    SELECT COUNT(*) as total FROM users;
";

if ($mysqli->multi_query($sql)) {
    // 첫 번째 결과 세트:Paginated 데이터
    if ($result = $mysqli->store_result()) {
        echo "<h3>현재 페이지 사용자 목록</h3><ul>";
        while ($row = $result->fetch_assoc()) {
            echo "<li>{$row['username']} ({$row['email']})</li>";
        }
        echo "</ul>";
        $result->free();
    }

    // 다음 결과 세트로 이동하십시오:총 기록
    if ($mysqli->next_result()) {
        if ($countResult = $mysqli->store_result()) {
            $countRow = $countResult->fetch_assoc();
            $total = $countRow['total'];
            $countResult->free();

            $totalPages = ceil($total / $pageSize);
            echo "<p>흔한 {$totalPages} 페이지,총 기록:{$total}</p>";
        }
    }
} else {
    echo "쿼리가 실패했습니다: " . $mysqli->error;
}

$mysqli->close();
?>

예제에 포함 된 핵심 사항 :

  • Multi_Query ()는 여러 SQL을 실행하는 데 사용됩니다.

  • Store_result () 를 사용하여 각 결과 세트를 얻으십시오.

  • 다음 _result ()를 사용하여 다음 결과 세트로 이동하십시오.

  • 정렬 필드 및 정렬 방법을 동적으로 지원합니다.

더 복잡한 시나리오 : 여러 종류로 여러 PAGED 데이터를 얻습니다.

"생성 시간에 따라 정렬 된"과 "사용자 이름으로 정렬 된"레코드를 모두 얻으려면 다음을 작성할 수 있습니다.

 $sql = "
    SELECT id, username, email FROM users ORDER BY created_at DESC LIMIT 0,10;
    SELECT id, username, email FROM users ORDER BY username ASC LIMIT 0,10;
";

그런 다음 Next_result ()를 사용하여 각 데이터를 전환하십시오.

  • SQL 주입을 피하십시오 : Pagination 및 정렬 매개 변수는 엄격하게 필터링되어야합니다.

  • 그것을 사용하기 전에 더 많은 결과 세트가 있는지 확인하십시오.

  • 데이터베이스 계층이 캡슐화 된 경우 (예 : ORM 사용) 다음 _result ()를 사용하려면 기본 SQL을 수동으로 실행해야 할 수도 있습니다.

요약

Next_result () 는 일반적으로 다중 진료 쿼리 결과를 처리하는 데 사용되지만 페이징 및 정렬에 대한 복합 요청에 사용하면 데이터 수집의 효율성을 크게 향상시키고 데이터베이스 연결 수를 줄일 수 있습니다. 일부 시나리오에서는 시스템을보다 유연하고 효율적으로 만들 수 있습니다.

이 기사의 예를 통해 최적화 할 수있는 몇 가지 비즈니스 시나리오를 생각해 보셨습니까? 더 영리한 방법으로 next_result ()를 사용하는 것을 환영합니다!