현재 위치: > 최신 기사 목록> next_result ()를 사용할 때 리소스가 릴리스되지 않도록하는 방법? 이 3 가지 실용적인 기술을 마스터하십시오

next_result ()를 사용할 때 리소스가 릴리스되지 않도록하는 방법? 이 3 가지 실용적인 기술을 마스터하십시오

gitbox 2025-05-06

PHP에서 Next_result () 는 MySQLI 확장에서 일반적인 메소드이며 일반적으로 여러 쿼리를 실행할 때 사용됩니다. 그러나 많은 개발자가 Next_result ()를 사용할 때 리소스 릴리스를 무시할 수있어 메모리 누출 및 성능 문제가 발생할 수 있습니다. 이를 피하기 위해이 기사에서는 Next_result ()를 사용할 때 리소스를 올바르게 릴리스 할 수 있도록 3 가지 실용적인 팁을 공유합니다.

1. 모든 결과 세트를 정리하십시오

여러 쿼리가 실행되면 Next_Result ()는 각 쿼리의 결과 세트를 읽고 처리합니다. 결과 세트가 제 시간에 해제되지 않으면 항상 메모리를 선택합니다. 이를 피하려면 결과를 처리 한 후 Free_Result () 메소드를 호출하십시오.

샘플 코드 :

 <?php
// 데이터베이스 연결을 만듭니다
$mysqli = new mysqli("localhost", "username", "password", "database");

// 여러 쿼리를 수행하십시오
$mysqli->multi_query("SELECT * FROM table1; SELECT * FROM table2;");

// 첫 번째 결과 세트를 처리하십시오
do {
    if ($result = $mysqli->store_result()) {
        // 처리 데이터
        while ($row = $result->fetch_assoc()) {
            echo $row['column_name'];
        }
        // 첫 번째 결과 세트를 정리하십시오
        $result->free();
    }
    // 다음 결과 세트로 이동하십시오
} while ($mysqli->next_result());
?>

위의 코드에서 첫 번째 쿼리 결과 세트를 처리 한 후 $ result-> free ()를 호출하여 리소스를 확보합니다. 그런 다음 다음 쿼리의 결과 세트는 Next_result () 에 의해 계속됩니다.

2. Multi_Query ()를 사용할 때는주의해서 오류를 처리합니다.

Multi_Query ()를 사용하여 여러 쿼리를 실행하면 쿼리 중 하나가 실패하면 후속 쿼리 결과가 정상적으로 해제되지 않을 수 있습니다. 이 경우 반환 된 오류 메시지를 확인하여 각 쿼리의 결과 세트가 정리 될 수 있습니다.

샘플 코드 :

 <?php
$mysqli = new mysqli("localhost", "username", "password", "database");

// 여러 쿼리 문을 실행하십시오
$query = "SELECT * FROM table1; SELECT * FROM table2;";
if ($mysqli->multi_query($query)) {
    do {
        if ($result = $mysqli->store_result()) {
            // 처리 데이터
            while ($row = $result->fetch_assoc()) {
                echo $row['column_name'];
            }
            // 결과 세트를 정리하십시오
            $result->free();
        }
    } while ($mysqli->next_result());
} else {
    echo "Error: " . $mysqli->error;
}
?>

이 예에서 Multi_Query () 가 실행되지 않으면 코드는 후속 쿼리를 계속 실행하는 대신 오류 메시지를 출력하여 리소스 점유 자원이없는 결과 세트를 방지합니다.

3. 트랜잭션을 사용하고 수동으로 쿼리 순서를 제어하십시오

일부 시나리오에서 쿼리 순서가 트랜잭션 처리와 관련이있는 경우 트랜잭션을 사용하여 쿼리를 원활하게 실행하고 각 쿼리의 릴리스를 수동으로 관리 할 수 ​​있습니다. 이는 잘못된 쿼리 순서로 인해 리소스의 미숙증 문제를 피할 수 있습니다.

샘플 코드 :

 <?php
$mysqli = new mysqli("localhost", "username", "password", "database");

// 거래를 시작하십시오
$mysqli->begin_transaction();

try {
    // 첫 번째 쿼리를 실행하십시오
    $mysqli->query("SELECT * FROM table1;");
    
    // 두 번째 쿼리를 실행하십시오
    $mysqli->query("SELECT * FROM table2;");
    
    // 거래를 제출하십시오
    $mysqli->commit();
} catch (Exception $e) {
    // 오류가 발생하면 트랜잭션이 롤백됩니다.
    $mysqli->rollback();
    echo "Failed: " . $e->getMessage();
} finally {
    // 모든 결과 세트를 정리하십시오
    while ($mysqli->more_results()) {
        $mysqli->next_result();
    }
}
?>

이 예에서는 트랜잭션을 사용하여 여러 쿼리를 처리하고 실행이 완료된 후 모든 쿼리의 결과 세트를 해제하기 위해 Next_Result () 가 호출되어 있는지 확인하십시오.

요약

next_result ()를 사용할 때 리소스를 피하는 문제를 피하려면 다음 사항을 따라야합니다.

  1. 각 쿼리 결과 프로세스 후에는 free_result ()를 호출하여 리소스를 확보하십시오.

  2. Multi_Query ()를 사용하여 여러 쿼리를 실행할 때 오류 처리에주의를 기울이고 각 쿼리의 결과가 올바르게 정리되어 있는지 확인하십시오.

  3. 트랜잭션을 사용하는 경우 쿼리 순서를 수동으로 제어하고 모든 쿼리가 실행 된 후 모든 결과 세트가 정리되어 있는지 확인하십시오.

이 팁을 따르면 발표되지 않은 리소스를 효과적으로 피할 수 있으므로 응용 프로그램 성능 및 안정성을 향상시킬 수 있습니다.