mysqli_stmt_store_result în PHP

Aduce în memorie tot rezultatul unei interogări pregătite, ca să poți afla numărul de rânduri și să sari între ele.

Sintaxă
mysqli_stmt_store_result(mysqli_stmt $statement): bool

Ce face mysqli_stmt_store_result

Implicit, rândurile unei interogări pregătite sunt citite pe rând de pe server. După mysqli_stmt_store_result, toate sunt aduse în PHP: mysqli_stmt_num_rows dă numărul corect, mysqli_stmt_data_seek poate sări la orice rând, iar conexiunea este liberă pentru alte interogări.

Nu este nevoie de el dacă folosești mysqli_stmt_get_result, care aduce oricum rezultatul în memorie.

Exemplele de pe această pagină folosesc baza de date magazin, cu tabelul produse (coloanele id INT AUTO_INCREMENT, nume VARCHAR(100) NOT NULL, pret INT și stoc INT) și patru rânduri: Laptop (3200 lei, 5 buc.), Mouse (80 lei, 40 buc.), Monitor (900 lei, 0 buc.) și Tastatură (150 lei, 12 buc.). Comenzile SQL sunt explicate în secțiunea MySQL. Rezultatele au fost scrise pentru MySQL 8, pentru că exemplele au nevoie de un server de baze de date.

Parametri

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

Ce returnează

true la succes.

Exemple

Exemplul 1: Numărul de rânduri, înainte și după

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

$stmt = mysqli_prepare($conn, "SELECT id FROM produse WHERE stoc > ?");
$minim = 0;
mysqli_stmt_bind_param($stmt, "i", $minim);
mysqli_stmt_execute($stmt);

echo "Fără store_result: " . mysqli_stmt_num_rows($stmt) . "\n";
mysqli_stmt_store_result($stmt);
echo "Cu store_result: " . mysqli_stmt_num_rows($stmt);

Rezultat (cu un server MySQL și tabelul produse de mai sus)

Fără store_result: 0
Cu store_result: 3

Greșeli frecvente

  • Apelezi mysqli_stmt_store_result pentru un rezultat cu milioane de rânduri. Totul ajunge în memoria PHP; citește rând cu rând.

Comenzi înrudite

  • mysqli_stmt_num_rows: Returnează numărul de rânduri din rezultatul unei interogări pregătite, după mysqli_stmt_store_result.
  • mysqli_stmt_data_seek: Mută cursorul la un anumit rând în rezultatul păstrat al unei interogări pregătite.
  • mysqli_stmt_free_result: Eliberează memoria rezultatului păstrat cu mysqli_stmt_store_result.
  • mysqli_stmt_fetch: Citește următorul rând al unei interogări pregătite în variabilele legate cu mysqli_stmt_bind_result.