mysqli_stmt_bind_result în PHP

Leagă variabile de coloanele rezultatului unei interogări pregătite; mysqli_stmt_fetch le completează rând cu rând.

Sintaxă
mysqli_stmt_bind_result(mysqli_stmt $statement, mixed &...$vars): bool

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 eroarea Number of bind variables doesn't match number of fields in prepared statement. Scrie coloanele explicit în SELECT.

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.