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.