Ce face mysqli_stmt_bind_result
După mysqli_stmt_execute, ai două moduri de a citi rezultatul: mysqli_stmt_get_result (dă un mysqli_result obișnuit) sau mysqli_stmt_bind_result + mysqli_stmt_fetch. Al doilea mod pune valorile fiecărui rând direct în variabilele tale, câte una pentru fiecare coloană, în ordine.
Numărul de variabile trebuie să fie egal cu numărul de coloane din SELECT. Valorile păstrează tipul din baza de date (int pentru coloanele INT).
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ă. |
$vars |
Variabilele, câte una pentru fiecare coloană. |
Ce returnează
true la succes.
Exemple
Exemplul 1: Valori direct în variabile
<?php
$conn = mysqli_connect("localhost", "ana", "parola_ta", "magazin");
mysqli_set_charset($conn, "utf8mb4");
$stmt = mysqli_prepare($conn, "SELECT nume, pret FROM produse WHERE pret < ? ORDER BY pret");
$limita = 1000;
mysqli_stmt_bind_param($stmt, "i", $limita);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $nume, $pret);
while (mysqli_stmt_fetch($stmt)) {
echo "$nume: $pret lei\n";
}
var_dump($pret);
Rezultat (cu un server MySQL și tabelul produse de mai sus)
Mouse: 80 lei
Tastatură: 150 lei
Monitor: 900 lei
int(900)
Greșeli frecvente
- Dai mai puține variabile decât coloane, de exemplu cu
SELECT *. Primești eroareaNumber of bind variables doesn't match number of fields in prepared statement. Scrie coloanele explicit înSELECT.
Comenzi înrudite
mysqli_stmt_fetch: Citește următorul rând al unei interogări pregătite în variabilele legate cu mysqli_stmt_bind_result.mysqli_prepare: Pregătește o interogare SQL cu semne ? în loc de valori. Este metoda sigură împotriva SQL injection.mysqli_stmt_store_result: 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.