PHP를 사용하여 MySQL 데이터베이스를 조작 할 때는 일반적으로 MySQLI 확장을 사용하여 여러 SQL 문을 실행합니다. 이 다중 상태 쿼리 시나리오에서 Next_result () 는 개발자가 각 쿼리의 결과 세트에 점차 액세스 할 수있는 매우 중요한 기능입니다. 이 기본 기능 외에도 Next_result ()는 일부 복잡한 시나리오에서 페이징 및 정렬과 같은 고급 기능을 구현하는 데 도움이 될 수 있습니다.
이 기사는 실제 코드 예제를 결합하여 Pagination and Sorting에서 Next_result ()를 사용하는 방법을 보여줍니다. 특히 단일 요청을 통해 여러 데이터 조각을 완료하려는 경우.
next_result () 는 MySQLI 객체의 여러 문을 포함하는 쿼리 결과를 처리하는 데 사용되는 메소드입니다. 여러 SQL을 실행할 때 첫 번째 결과 세트는 store_result () 또는 use_result () 를 통해 얻어지고 다음 _result () 는 다음 결과 세트로 이동하는 데 사용됩니다.
기본 구문 :
$mysqli->next_result();
대부분의 응용 분야에서 페이징 및 정렬은 일반적으로 데이터베이스에 제한 및 주문이 있는 SQL 쿼리를 보내면 수행됩니다. 그러나 때로는 성능을 향상 시키거나 클라이언트와 데이터베이스 간의 상호 작용 수를 줄이기 위해 여러 쿼리를 한 번에 보내고 여러 PAGED 데이터 블록 또는 한 번에 다른 정렬 된 결과를 얻을 수 있습니다. 다음은 Next_result ()가 유용 할 수있는 곳입니다.
사용자 목록을 예로 들어 보겠습니다.
현재 페이지의 데이터 (정렬);
총 레코드 (Pagination Navigation).
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$pageSize = 10;
$offset = ($page - 1) * $pageSize;
$sortColumn = isset($_GET['sort']) ? $_GET['sort'] : 'created_at';
$sortOrder = (isset($_GET['order']) && strtolower($_GET['order']) === 'asc') ? 'ASC' : 'DESC';
// 알아채다SQL주입,여기에서 처리를 단순화하십시오
$sql = "
SELECT id, username, email, created_at
FROM users
ORDER BY $sortColumn $sortOrder
LIMIT $offset, $pageSize;
SELECT COUNT(*) as total FROM users;
";
if ($mysqli->multi_query($sql)) {
// 첫 번째 결과 세트:Paginated 데이터
if ($result = $mysqli->store_result()) {
echo "<h3>현재 페이지 사용자 목록</h3><ul>";
while ($row = $result->fetch_assoc()) {
echo "<li>{$row['username']} ({$row['email']})</li>";
}
echo "</ul>";
$result->free();
}
// 다음 결과 세트로 이동하십시오:총 기록
if ($mysqli->next_result()) {
if ($countResult = $mysqli->store_result()) {
$countRow = $countResult->fetch_assoc();
$total = $countRow['total'];
$countResult->free();
$totalPages = ceil($total / $pageSize);
echo "<p>흔한 {$totalPages} 페이지,총 기록:{$total}</p>";
}
}
} else {
echo "쿼리가 실패했습니다: " . $mysqli->error;
}
$mysqli->close();
?>
Multi_Query ()는 여러 SQL을 실행하는 데 사용됩니다.
Store_result () 를 사용하여 각 결과 세트를 얻으십시오.
다음 _result ()를 사용하여 다음 결과 세트로 이동하십시오.
정렬 필드 및 정렬 방법을 동적으로 지원합니다.
"생성 시간에 따라 정렬 된"과 "사용자 이름으로 정렬 된"레코드를 모두 얻으려면 다음을 작성할 수 있습니다.
$sql = "
SELECT id, username, email FROM users ORDER BY created_at DESC LIMIT 0,10;
SELECT id, username, email FROM users ORDER BY username ASC LIMIT 0,10;
";
그런 다음 Next_result ()를 사용하여 각 데이터를 전환하십시오.
SQL 주입을 피하십시오 : Pagination 및 정렬 매개 변수는 엄격하게 필터링되어야합니다.
그것을 사용하기 전에 더 많은 결과 세트가 있는지 확인하십시오.
데이터베이스 계층이 캡슐화 된 경우 (예 : ORM 사용) 다음 _result ()를 사용하려면 기본 SQL을 수동으로 실행해야 할 수도 있습니다.
Next_result () 는 일반적으로 다중 진료 쿼리 결과를 처리하는 데 사용되지만 페이징 및 정렬에 대한 복합 요청에 사용하면 데이터 수집의 효율성을 크게 향상시키고 데이터베이스 연결 수를 줄일 수 있습니다. 일부 시나리오에서는 시스템을보다 유연하고 효율적으로 만들 수 있습니다.
이 기사의 예를 통해 최적화 할 수있는 몇 가지 비즈니스 시나리오를 생각해 보셨습니까? 더 영리한 방법으로 next_result ()를 사용하는 것을 환영합니다!