현재 위치: > 최신 기사 목록> php next_result () 함수가 false를 반환하는 일반적인 이유

php next_result () 함수가 false를 반환하는 일반적인 이유

gitbox 2025-04-29

데이터베이스 작업에 PHP의 MySQLI Extension을 사용하는 경우 Next_Result () 함수는 종종 여러 결과 세트가 포함 된 쿼리 (예 : 여러 SQL 문을 실행하는 Multi_Query () 호출)를 포함하는 쿼리를 처리하는 데 사용됩니다. 그러나 개발자는 때때로 함수가 False를 반환한다는 것을 알게되므로 후속 결과 설정을 사용할 수 없습니다. 그렇다면 next_result ()가 거짓을 반환하는 이유는 무엇입니까? 문제 해결 및 해결 방법은 무엇입니까?

이 기사는이 문제를 자세히 분석합니다.

1. Next_result () 란 무엇입니까?

mysqli :: next_result ()는 multi_query () 와 함께 사용되는 다음 결과 세트로 이동하는 데 사용되는 메소드입니다. 일반적으로 다중 상태 쿼리를 실행할 때는 각 결과를 하나씩 설정하려면이를 사용해야합니다.

기본 사용 예제 :

 $mysqli = new mysqli("localhost", "user", "password", "database");

$sql = "SELECT * FROM users; SELECT * FROM orders;";
if ($mysqli->multi_query($sql)) {
    do {
        if ($result = $mysqli->store_result()) {
            while ($row = $result->fetch_assoc()) {
                print_r($row);
            }
            $result->free();
        }
    } while ($mysqli->next_result());
} else {
    echo "Query Error: " . $mysqli->error;
}

2. 다음 ext_result ()가 거짓을 반환하는 일반적인 이유

1. 더 이상 결과 세트가 없습니다

가장 일반적인 이유는 모든 결과 세트를 읽었 기 때문입니다. 현재 Next_result () 에게 전화하면 "더 이상 결과가 없음" 나타냅니다.

솔루션 : 사이클 종료 조건을 합리적으로 제어하면 추가 처리가 필요하지 않습니다.

2. 이전 쿼리에서 오류가 발생했습니다

multi_query () 에 의해 실행 된 다중 SQL 문 중 하나가 실패하면, next_result ()는 false를 반환하고 $ mysqli-> 오류는 특정 오류 정보를 갖습니다.

예:

 $sql = "SELECT * FROM valid_table; SELECT * FROM invalid_table;";
if ($mysqli->multi_query($sql)) {
    do {
        if ($result = $mysqli->store_result()) {
            // 처리 결과
            $result->free();
        } else {
            if ($mysqli->errno) {
                echo "Error: " . $mysqli->error;
                break;
            }
        }
    } while ($mysqli->next_result());
}

3. 이전 결과 세트를 정리하는 것을 잊었습니다

이전 결과 세트 가 올바르게 릴리스되지 않았거나 store_result () 를 통해 명시 적으로 추출되지 않은 경우, 특히 이전 버전의 PHP 또는 MySQL에서 Next_result ()에 문제가 발생할 수 있습니다.

제안 : 결과 내용을 처리하지 않더라도 항상 $ result-> free () 또는 $ mysqli-> store_result ()를 호출하십시오.

4. SQL 문 사이에 구문 오류 또는 불법 명령문이 있습니다.

Multi_Query ()는 여러 문을 지원하지만 모든 유형의 문 조합을 지원하지는 않습니다. 예를 들어, 엄격한 모드에서 특정 DDL 문 (예 : 생성 프로 시저 )를 실행하면 제한 될 수 있습니다.

제안 : 모든 진술이 합법적인지 확인하고 필요한 경우 문제를 해결하기 위해 $ mysqli-> 오류를 사용하십시오.

3. 문제 해결 및 디버깅 기술

  1. Error_Reporting (E_ALL)을 사용하여 모든 오류 프롬프트를 활성화하십시오.

  2. 자세한 오류 정보는 $ mysqli-> errno$ mysqli-> 오류를 확인하십시오.

  3. 로깅 : 각 next_result () 반환 값 및 오류 출력을 로그에 쓰십시오.

  4. mysqli_more_results ()를 사용하여 결과 세트가 여전히 있는지 여부를 결정하십시오.

 if ($mysqli->more_results()) {
    $mysqli->next_result();
}

IV. 완전한 예

 $mysqli = new mysqli("localhost", "user", "password", "database");

$sql = "SELECT * FROM users; SELECT * FROM orders WHERE order_date > '2024-01-01'";
if ($mysqli->multi_query($sql)) {
    do {
        if ($result = $mysqli->store_result()) {
            while ($row = $result->fetch_assoc()) {
                echo "데이터: " . implode(", ", $row) . "<br>";
            }
            $result->free();
        } else {
            if ($mysqli->errno) {
                echo "실수: " . $mysqli->error . "<br>";
            }
        }
    } while ($mysqli->more_results() && $mysqli->next_result());
} else {
    echo "초기 쿼리가 실패했습니다:" . $mysqli->error;
}

5. 참조 링크