Ce face mysqli_fetch_object
Implicit, fiecare rând devine un obiect stdClass, iar coloanele se citesc cu $rand->nume. Poți da și numele unei clase proprii: PHP setează întâi proprietățile, apoi apelează constructorul (cu argumentele din $constructor_args).
Clasa ta trebuie să declare proprietățile pentru toate coloanele. Altfel, din PHP 8.2 primești Deprecated: Creation of dynamic property. La fel ca la mysqli_fetch_assoc, valorile vin ca text la interogările obișnuite.
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 |
|---|---|
$result |
Rezultatul interogării. |
$class |
Opțional. Clasa obiectelor create. |
$constructor_args |
Opțional. Argumentele constructorului. |
Ce returnează
Un obiect, null dacă nu mai sunt rânduri sau false la eroare.
Exemple
Exemplul 1: Rânduri ca stdClass
<?php
$conn = mysqli_connect("localhost", "ana", "parola_ta", "magazin");
mysqli_set_charset($conn, "utf8mb4");
$rezultat = mysqli_query($conn, "SELECT nume, pret FROM produse WHERE stoc > 10 ORDER BY id");
while ($p = mysqli_fetch_object($rezultat)) {
echo "$p->nume: $p->pret lei\n";
}
Rezultat (cu un server MySQL și tabelul produse de mai sus)
Mouse: 80 lei
Tastatură: 150 lei
Exemplul 2: Rânduri ca obiecte ale unei clase proprii
<?php
class Produs
{
public $id;
public $nume;
public $pret;
public function pretCuTva(): float
{
return $this->pret * 1.21;
}
}
$conn = mysqli_connect("localhost", "ana", "parola_ta", "magazin");
$p = mysqli_fetch_object(mysqli_query($conn, "SELECT id, nume, pret FROM produse WHERE id = 2"), Produs::class);
echo get_class($p) . ": $p->nume, " . $p->pretCuTva() . " lei cu TVA";
Rezultat (cu un server MySQL și tabelul produse de mai sus)
Produs: Mouse, 96.8 lei cu TVA
Greșeli frecvente
- Folosești o clasă cu proprietăți cu tip (
public int $pret) și te aștepți la verificare strictă. Valorile vin ca text și sunt convertite la atribuire; un text nenumeric dăTypeError.
Comenzi înrudite
mysqli_fetch_assoc / mysqli_fetch_all / mysqli_fetch_array: Citește următorul rând dintr-un rezultat, ca tablou cu numele coloanelor drept chei.mysqli_query: Trimite o interogare SQL către baza de date. Pentru SELECT returnează un rezultat din care citești rândurile.class / new / $this: Definește o clasă: un șablon pentru obiecte care au date (proprietăți) și funcții proprii (metode).