현재 위치: > 최신 기사 목록> Next_result ()를 사용하여 저장된 절차에 의해 반환 된 여러 결과를 올바르게 처리합니다.

Next_result ()를 사용하여 저장된 절차에 의해 반환 된 여러 결과를 올바르게 처리합니다.

gitbox 2025-05-02

PHP 응용 프로그램을 개발할 때, 특히 저장 프로 시저가 여러 결과 세트를 반환 할 때 저장 절차를 실행 해야하는 상황을 종종 만나십시오. PHP에서 이러한 여러 결과 세트를 올바르게 처리하는 방법은 매우 중요한 질문입니다. PHP의 MySQLI Extension 은이 목표를 달성하는 데 도움이되는 Next_result () 라는 메소드를 제공합니다.

1. 저장 프로 시저는 여러 결과 세트에 대한 배경을 반환합니다

데이터베이스에서 저장된 프로 시저를 실행하면 여러 결과 세트가 반환 될 수 있습니다. 이것은 단일 데이터베이스 작업에서 여러 다른 데이터 세트를 얻는 것과 같은 복잡한 쿼리를 처리 할 때 유용합니다. 저장된 프로 시저가 사용자의 기본 정보 세트, 사용자 주문 기록 및 사용자 결제 기록 세트를 반환한다고 가정합니다. 이 결과 세트를 하나씩 처리해야합니다.

2. MySQLI를 사용하여 저장된 절차를 실행합니다

먼저 MySQLI로 저장된 절차를 실행해야합니다. 다음은 저장된 절차를 호출하고 처리 된 여러 결과 세트를 처리하는 방법을 보여주는 기본 PHP 예입니다.

 <?php
// 데이터베이스에 연결하십시오
$mysqli = new mysqli("localhost", "username", "password", "database_name");

// 연결이 성공했는지 확인하십시오
if ($mysqli->connect_error) {
    die("연결이 실패했습니다: " . $mysqli->connect_error);
}

// 저장된 절차를 실행하십시오
$query = "CALL your_stored_procedure()";
if ($result = $mysqli->query($query)) {
    // 첫 번째 결과 세트를 처리하십시오
    if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
            echo "사용자ID: " . $row["user_id"] . " - 이름: " . $row["name"] . "<br>";
        }
    }
    
    // 다음 결과 세트를 얻으십시오
    if ($mysqli->more_results()) {
        $mysqli->next_result();
        // 두 번째 결과 세트 처리
        if ($result = $mysqli->store_result()) {
            while ($row = $result->fetch_assoc()) {
                echo "주문하다ID: " . $row["order_id"] . " - 양: " . $row["amount"] . "<br>";
            }
        }
    }
    
    // 다음 결과 세트를 얻으십시오
    if ($mysqli->more_results()) {
        $mysqli->next_result();
        // 세 번째 결과 세트 처리
        if ($result = $mysqli->store_result()) {
            while ($row = $result->fetch_assoc()) {
                echo "지불하다ID: " . $row["payment_id"] . " - 상태: " . $row["status"] . "<br>";
            }
        }
    }
} else {
    echo "실수: " . $mysqli->error;
}

// 연결을 닫으십시오
$mysqli->close();
?>

3. 코드 파싱

  • 귀하의 전화 : 저장 프로 시저를 실행하십시오.

  • $ mysqli-> query ($ query) : 쿼리를 데이터베이스로 전송합니다.

  • more_results () : 더 많은 결과 세트를 사용할 수 있는지 확인하십시오.

  • next_result () : 다음 결과 세트를 가져옵니다. PHP에서는 다음 결과 세트로 올바르게 이동하려면 Next_result ()에게 전화해야합니다.

  • store_result () : 현재 결과 세트에서 데이터를 추출합니다.

4. 여러 결과 세트의 핵심 사항 처리

여러 결과 세트로 작업 할 때 주목해야 할 몇 가지 핵심 사항이 있습니다.

  1. more_results () : 여러 결과 세트를 쿼리 할 때마다 먼저 더 많은 결과 세트가 있는지 확인해야합니다. 더 이상 결과 세트가 없으면 more_results ()false를 반환합니다.

  2. next_result () : next_result () 의 각 실행 후 MySQLI는 다음 결과 세트로 자동 이동합니다. 현재 store_result ()를 사용하여 새 결과 세트를 얻고 처리 할 수 ​​있습니다.

  3. 결과 설정 충돌 방지 : 하나의 결과 세트를 처리 한 후 다음 _result () 를 호출하여 다음 결과 세트로 올바르게 이동하여 데이터 혼동을 피하십시오.

5. FAQ 및 솔루션

  • 오류 처리 : 각 쿼리가 실행되기 전후에 오류 점검이 수행되는지 확인하십시오. 단계가 실패하면 mysqli_error ($ mysqli) 를 통해 오류 메시지를 얻을 수 있습니다.

  • 성능 최적화 : 여러 결과 세트를 처리 할 때 쿼리 및 저장 프로 시저 설계가 효율적인지 확인하십시오. 복잡한 쿼리가 여러 개있는 경우 하나의 작업의 복잡성을 줄이기 위해 여러 개의 별도 저장 절차로 분할하는 것을 고려할 수 있습니다.