PHP에서 데이터베이스 작업에 MySQLI 확장을 사용하면 여러 결과 세트와 관련된 상황이 발생할 수 있습니다. 특히 저장된 프로 시저 또는 여러 쿼리 문을 실행할 때 Next_result () 및 Store_result () 는 일반적으로 사용되는 두 가지 기능입니다. 이 기사에서는 여러 쿼리 결과를 올바르게 처리 할 수 있도록이 두 기능이 어떻게 작동하는지 살펴 봅니다.
store_result () :이 함수는 쿼리 결과를 메모리에 저장하는 데 사용됩니다. 모든 데이터를 한 번에 읽고 MySQLI_RESULT 객체에 저장합니다. 쿼리 결과를 여러 장소에서 재사용 해야하는 시나리오에 적합합니다.
next_result () :이 함수는 여러 쿼리 문을 처리하는 데 사용됩니다. 여러 쿼리가 실행되면 다음 결과 세트를 가리키는 데 사용됩니다. 여러 결과 세트가 존재하는 경우 Next_Result ()를 호출하면 각 쿼리의 결과를 반복 할 수 있습니다.
여러 쿼리 (예 : 다중 선택 쿼리 또는 저장 프로 시저의 다중 결과 세트)가 포함 된 SQL 문을 실행하면 각 쿼리 결과가 올바르게 읽히고 처리되어야합니다. 이 경우 Store_result ()는 현재 쿼리의 결과를 저장하는 데 사용되며 Next_result ()는 다음 결과 세트를 가리키는 데 사용됩니다.
데이터베이스가 있다고 가정하고 저장 프로 시저 GetMultipleresults ()가 여러 쿼리 결과를 반환합니다. 각 결과 세트를 읽고 처리 할 수 있도록 store_result ()를 사용하여 현재 결과를 먼저 저장 한 다음 Next_result ()를 사용하여 다음 결과 세트를 가져와야합니다.
<?php
// 연결을 만듭니다
$mysqli = new mysqli("localhost", "user", "password", "database");
// 연결을 확인하십시오
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
// 쿼리를 실행하십시오
$query = "CALL getMultipleResults()";
if ($mysqli->multi_query($query)) {
do {
// 현재 결과 세트를 저장하십시오
if ($result = $mysqli->store_result()) {
// 처리 결과 세트
while ($row = $result->fetch_assoc()) {
echo "ID: " . $row['id'] . " Name: " . $row['name'] . "<br>";
}
$result->free();
}
// 다음 결과 세트를 얻으십시오
} while ($mysqli->next_result());
} else {
echo "쿼리가 실패했습니다: " . $mysqli->error;
}
// 연결을 닫으십시오
$mysqli->close();
?>
위 코드에서 :
여러 쿼리를 포함하는 SQL 문은 multi_query ()를 사용하여 실행됩니다.
do ... while 루프를 사용하여 각 쿼리 결과 세트를 처리합니다.
store_result ()는 현재 쿼리 결과를 메모리에 저장합니다.
fetch_assoc () 메소드를 통해 각 데이터 행을 가져오고 표시합니다.
결과가 없을 때까지 다음 쿼리의 결과 세트를 얻으려면 next_result () 를 사용하십시오.
메모리 사용 : 쿼리 결과가 크면 store_result () 를 자주 사용하면 더 많은 메모리가 필요할 수 있습니다. 현재 사용 _result ()를 사용하여 메모리 사용을 줄이기 위해 쿼리 결과를 한 줄씩 읽을 수 있습니다.
쿼리 순서 : Multi_Query () 로 여러 쿼리를 실행할 때 각 쿼리가 결과 세트를 올바르게 반환해야합니다. 그렇지 않으면 Next_Result () 가 올바르게 실행되지 않을 수 있습니다.
오류 처리 : 각 쿼리의 실행 상태를 확인하여 오류가 발생하지 않는지 확인하고 쿼리 고장으로 인해 프로그램 충돌을 피하십시오.
next_result () 및 store_result () 를 결합하면 PHP의 여러 결과 세트를 처리하여 각 쿼리 결과를 올바르게 읽고 표시 할 수 있습니다. 이것은 저장된 절차 또는 여러 쿼리와 관련된 상황에 매우 유용하며 코드의 유연성과 안정성을 크게 향상시킬 수 있습니다.