PHP 응용 프로그램을 개발할 때, 특히 저장 프로 시저가 여러 결과 세트를 반환 할 때 저장 절차를 실행 해야하는 상황을 종종 만나십시오. PHP에서 이러한 여러 결과 세트를 올바르게 처리하는 방법은 매우 중요한 질문입니다. PHP의 MySQLI Extension 은이 목표를 달성하는 데 도움이되는 Next_result () 라는 메소드를 제공합니다.
데이터베이스에서 저장된 프로 시저를 실행하면 여러 결과 세트가 반환 될 수 있습니다. 이것은 단일 데이터베이스 작업에서 여러 다른 데이터 세트를 얻는 것과 같은 복잡한 쿼리를 처리 할 때 유용합니다. 저장된 프로 시저가 사용자의 기본 정보 세트, 사용자 주문 기록 및 사용자 결제 기록 세트를 반환한다고 가정합니다. 이 결과 세트를 하나씩 처리해야합니다.
먼저 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();
?>
귀하의 전화 : 저장 프로 시저를 실행하십시오.
$ mysqli-> query ($ query) : 쿼리를 데이터베이스로 전송합니다.
more_results () : 더 많은 결과 세트를 사용할 수 있는지 확인하십시오.
next_result () : 다음 결과 세트를 가져옵니다. PHP에서는 다음 결과 세트로 올바르게 이동하려면 Next_result ()에게 전화해야합니다.
store_result () : 현재 결과 세트에서 데이터를 추출합니다.
여러 결과 세트로 작업 할 때 주목해야 할 몇 가지 핵심 사항이 있습니다.
more_results () : 여러 결과 세트를 쿼리 할 때마다 먼저 더 많은 결과 세트가 있는지 확인해야합니다. 더 이상 결과 세트가 없으면 more_results () 는 false를 반환합니다.
next_result () : next_result () 의 각 실행 후 MySQLI는 다음 결과 세트로 자동 이동합니다. 현재 store_result ()를 사용하여 새 결과 세트를 얻고 처리 할 수 있습니다.
결과 설정 충돌 방지 : 하나의 결과 세트를 처리 한 후 다음 _result () 를 호출하여 다음 결과 세트로 올바르게 이동하여 데이터 혼동을 피하십시오.
오류 처리 : 각 쿼리가 실행되기 전후에 오류 점검이 수행되는지 확인하십시오. 단계가 실패하면 mysqli_error ($ mysqli) 를 통해 오류 메시지를 얻을 수 있습니다.
성능 최적화 : 여러 결과 세트를 처리 할 때 쿼리 및 저장 프로 시저 설계가 효율적인지 확인하십시오. 복잡한 쿼리가 여러 개있는 경우 하나의 작업의 복잡성을 줄이기 위해 여러 개의 별도 저장 절차로 분할하는 것을 고려할 수 있습니다.