mysqli_stmt_more_results în PHP

mysqli avansat PHP 5.3+

Verifică dacă o interogare pregătită mai are rezultate de citit, de exemplu de la o procedură stocată.

Sintaxă
mysqli_stmt_more_results(mysqli_stmt $statement): bool

Ce face mysqli_stmt_more_results

O procedură stocată apelată cu CALL poate întoarce mai multe rezultate, unul după altul. După ce citești primul, mysqli_stmt_more_results spune dacă mai urmează unul, iar mysqli_stmt_next_result trece la el.

Parametri

Parametru Descriere
$statement Interogarea pregătită și executată.

Ce returnează

true dacă mai sunt rezultate.

Exemple

Exemplul 1: Procedură cu două rezultate

Presupunem procedura CREATE PROCEDURE raport(IN prag INT) BEGIN SELECT COUNT(*) FROM produse WHERE pret > prag; SELECT nume FROM produse WHERE pret > prag ORDER BY pret; END.

<?php
$conn = mysqli_connect("localhost", "ana", "parola_ta", "magazin");
mysqli_set_charset($conn, "utf8mb4");

$stmt = mysqli_prepare($conn, "CALL raport(?)");
$prag = 100;
mysqli_stmt_bind_param($stmt, "i", $prag);
mysqli_stmt_execute($stmt);

do {
    if ($rezultat = mysqli_stmt_get_result($stmt)) {
        echo implode(", ", array_column(mysqli_fetch_all($rezultat), 0)) . "\n";
    }
} while (mysqli_stmt_more_results($stmt) && mysqli_stmt_next_result($stmt));

Rezultat (cu un server MySQL și procedura raport)

3
Tastatură, Monitor, Laptop

Greșeli frecvente

  • Nu parcurgi toate rezultatele unei proceduri. Ultimul rezultat (starea apelului) rămâne necitit și următoarea interogare dă Commands out of sync.

Comenzi înrudite

  • mysqli_stmt_next_result: Trece la următorul rezultat al unei interogări pregătite care întoarce mai multe rezultate.
  • mysqli_more_results: Verifică dacă, după mysqli_multi_query, mai urmează rezultate de citit.
  • mysqli_prepare: Pregătește o interogare SQL cu semne ? în loc de valori. Este metoda sigură împotriva SQL injection.