mysqli_use_result în PHP

Pornește citirea rezultatului rând cu rând, direct de pe server, fără să îl aducă tot în memorie.

Sintaxă
mysqli_use_result(mysqli $mysql): mysqli_result|false

Ce face mysqli_use_result

Un rezultat nebufferizat consumă foarte puțină memorie, pentru că rândurile vin de pe server pe măsură ce le citești. Este potrivit pentru exporturi mari. Dezavantaje: nu știi numărul de rânduri până la final, nu poți sări între rânduri și nu poți rula alte interogări pe conexiune până nu termini.

Același efect se obține cu mysqli_query($conn, $sql, MYSQLI_USE_RESULT).

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
$mysql Conexiunea.

Ce returnează

Un mysqli_result nebufferizat sau false.

Exemple

Exemplul 1: Export rând cu rând

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

mysqli_real_query($conn, "SELECT id, nume, pret FROM produse ORDER BY id");
$rezultat = mysqli_use_result($conn);

$f = fopen("produse.csv", "w");
while ($rand = mysqli_fetch_row($rezultat)) {
    fputcsv($f, $rand, ",", '"', "");
}
fclose($f);
mysqli_free_result($rezultat);

echo file_get_contents("produse.csv");

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

1,Laptop,3200
2,Mouse,80
3,Monitor,900
4,Tastatură,150

Greșeli frecvente

  • Rulezi o altă interogare în bucla de citire. Conexiunea este ocupată cu rezultatul nebufferizat și primești Commands out of sync.

Comenzi înrudite

  • mysqli_store_result: Aduce în memorie tot rezultatul ultimei interogări trimise cu mysqli_real_query sau mysqli_multi_query.
  • mysqli_real_query: Trimite o interogare fără să preia rezultatul; îl iei apoi cu mysqli_store_result sau mysqli_use_result.
  • mysqli_query: Trimite o interogare SQL către baza de date. Pentru SELECT returnează un rezultat din care citești rândurile.