데이터베이스 작업에 PHP를 사용할 때, 특히 여러 SQL 쿼리를 실행할 때 다음 _result () 메소드가 종종 필요합니다. next_result () 의 목적은 객체를 다음 쿼리의 결과 세트로 전환하는 것입니다. 그러나 문제는 다음과 같습니다.
next_result () 부울 값을 반환합니다.
Return True : 다음 결과 세트가 다음 결과 세트로 성공적으로 전환되었거나 다음 결과 세트가 비어 있음을 나타냅니다 (예 : 행을 반환하지 않는 업데이트 문).
거짓 반환 : 더 이상 결과 세트가 없거나 스위칭 프로세스 중에 오류가 발생했음을 의미합니다.
따라서 판단하는 가장 직접적인 방법은 next_result () 의 반환 값을 확인하는 것입니다.
간단한 예를 살펴 보겠습니다.
<?php
$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()) {
echo "데이터 행:" . json_encode($row) . "<br>";
}
$result->free();
} else {
// 현재 진술은 아닙니다 SELECT 쿼리처럼,아마도 UPDATE、INSERT 기다리다
if ($mysqli->errno) {
echo "결과 세트 저장이 실패했습니다,실수:" . $mysqli->error . "<br>";
}
}
// 다음 결과 세트로 전환하십시오
if ($mysqli->more_results()) {
if (!$mysqli->next_result()) {
echo "다음 결과 세트로 전환하는 데 실패했습니다,실수:" . $mysqli->error . "<br>";
break;
}
} else {
// 더 이상 결과 세트가 없습니다
break;
}
} while (true);
} else {
echo "여러 쿼리를 수행하십시오失败,실수:" . $mysqli->error;
}
$mysqli->close();
?>
누락 된 오류 감지를 피하기 위해서는 다음 _result ()를 호출 한 직후 $ mysqli-> errno 가 0인지 확인하는 것이 좋습니다. 0이 아닌 경우 next_result () 가 true를 반환하지만 구문 오류와 같은 프로세스 중에 오류가 발생했음을 의미합니다.
보다 엄격한 버전은 다음과 같이 쓸 수 있습니다.
if ($mysqli->more_results()) {
if (!$mysqli->next_result()) {
// 发生了切换실수
error_log("결과 세트를 전환하지 못했습니다:" . $mysqli->error);
break;
} elseif ($mysqli->errno) {
// next_result() 반품 true,但实际出现了실수
error_log("결과 세트를 전환하는 동안 예외가 발생했습니다:" . $mysqli->error);
break;
}
}
next_result ()가 성공했는지 여부를 결정하려면 다음이되어야합니다.
next_result () 의 반환 값이 true 인지 확인하십시오.
$ mysqli-> errno 가 0인지 확인하십시오.
적시에 more_results ()를 사용하여 next_result ()를 호출 해야하는지 여부를 결정하십시오.
여러 쿼리가 매우 강력하지만 오류를 처리 할 때주의해야합니다. 그렇지 않으면 숨겨진 버그가 발생하기 쉽습니다.
multi_query () 및 next_result () 의 세부 사항에 대해 자세히 알고 싶다면 공식 문서 를 참조하십시오 (샘플 URL, 도메인 이름이 gitbox.net 으로 대체 됨).