PHP에서 커서로 저장된 절차를 처리하는 것은 특히 데이터베이스와 상호 작용할 때 일반적인 작업입니다. 커서는 데이터베이스의 제어 구조로 개발자가 데이터를 라인별로 검색 할 수 있습니다. MySQL 또는 MariaDB 데이터베이스를 사용하면 저장 프로 시저가 여러 결과 세트를 반환 할 수 있으며 Next_Result () 함수는이 상황을 처리하는 데 사용됩니다.
저장된 절차는 데이터베이스에 저장되어 여러 번 호출 될 수있는 사전 컴파일 된 SQL 문 모음입니다. 저장된 절차는 여러 결과 세트를 반환 할 수 있으며 종종 이러한 결과 세트를 커서를 통해 하나씩 처리합니다. PHP에서는 MySQLI 확장 또는 PDO 확장을 통해 MySQL 데이터베이스와 상호 작용할 수 있습니다.
저장 프로 시저가 여러 결과 세트를 반환하면 Next_Result ()를 사용하여 모든 결과 세트를 단계별로 검색 할 수 있습니다. 이 기능은 여러 결과 세트를 반환하는 페이징 쿼리와 같은 복잡한 작업을 처리하는 데 매우 적합합니다.
먼저 여러 결과 세트를 반환하는 저장 프로 시저를 작성해야합니다. 데이터베이스에서 여러 쿼리 결과를 반환하는 간단한 저장 프로 시저를 만들 수 있습니다. 저장된 절차를 작성하는 예는 다음과 같습니다.
DELIMITER $$
CREATE PROCEDURE multiple_results()
BEGIN
-- 첫 번째 결과 세트를 반환합니다
SELECT * FROM users;
-- 두 번째 결과 세트를 반환하십시오
SELECT * FROM orders;
END$$
DELIMITER ;
이 저장 프로 시저 Multiple_Results ()는 두 쿼리의 결과 세트를 반환합니다. 사용자 테이블의 데이터 및 주문 테이블의 데이터.
다음으로, 우리는이 저장 프로 시저를 호출하기 위해 PHP 코드를 작성하고 다음 _result () 함수를 사용하여 모든 결과 세트를 하나씩 얻습니다.
<?php
// 만들다 MySQLi 연결하다
$mysqli = new mysqli("localhost", "username", "password", "database_name");
// 检查연결하다
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
// 통화 저장 절차
$mysqli->multi_query("CALL multiple_results()");
// 결과 세트를 반복합니다
do {
// 현재 결과 세트를 가져옵니다
if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_assoc()) {
// 현재 결과 세트의 내용을 출력하십시오
echo "User ID: " . $row['id'] . " - Name: " . $row['name'] . "<br>";
}
$result->free();
}
// 다음 결과 세트를 얻으십시오
} while ($mysqli->next_result());
// 关闭연결하다
$mysqli->close();
?>
연결 생성 : 먼저 New MySQLI ()를 통해 MySQL 데이터베이스에 연결됩니다. 실제 상황에 따라 데이터베이스의 호스트, 사용자 이름, 비밀번호 및 데이터베이스 이름을 수정하십시오.
저장된 절차 실행 : multi_query () 메소드를 통해 저장된 프로 시저를 실행합니다. 이 예에서 Call Multiple_Results ()는 작성된 저장 프로 시저를 실행합니다.
다중 결과 세트를 처리하십시오 : do-while 루프를 사용하여 모든 결과 세트를 하나씩 얻으십시오. 각 루프에서는 store_result () 메소드를 통해 현재 결과를 설정하고 처리합니다. 여러 결과 세트가 있으면 Next_Result ()가 다음 결과 세트로 이동합니다.
무료 결과 세트 : 현재 결과 세트를 처리 한 후 $ result-> free ()를 통해 무료 메모리.
오류 처리 : 실제 애플리케이션에서 저장 프로 시저가 성공적으로 실행되는지 확인하는 것과 같은 데이터베이스 작업에 적절한 오류 처리 메커니즘을 추가하십시오.
여러 결과 세트의 처리 : 저장 프로 시저가 매우 큰 결과 세트를 반환하거나 쿼리 데이터의 양이 크면 성능 문제가 발생할 수 있습니다. 페이징 쿼리를 고려하거나 쿼리를 최적화 할 수 있습니다.
사용자 테이블과 주문 테이블에 각각 다음 데이터가 포함되어 있다고 가정합니다.
사용자 테이블 :
+----+-------+
| id | name |
+----+-------+
| 1 | John |
| 2 | Jane |
+----+-------+
주문 테이블 :
+----+------------+
| id | order_name |
+----+------------+
| 1 | Order A |
| 2 | Order B |
+----+------------+
출력은 다음과 같습니다.
User ID: 1 - Name: John
User ID: 2 - Name: Jane
Order ID: 1 - Order Name: Order A
Order ID: 2 - Order Name: Order B
PHP의 next_result () 함수를 사용하여 여러 결과 세트로 저장된 프로 시저를 효율적으로 처리하십시오. 적절한 데이터베이스 쿼리 및 커서 처리를 통해 각 결과 세트를 점차적으로 얻고 응용 프로그램의 데이터를 유연하게 처리 할 수 있습니다. 이 기술은 복잡한 데이터베이스 응용 프로그램, 특히 배치 작업 또는 페이징 쿼리가 필요한 시나리오에서 개발할 때 매우 유용합니다.