mysqli_fetch_object în PHP

Citește următorul rând din rezultat ca obiect, cu coloanele drept proprietăți.

Sintaxă
mysqli_fetch_object(mysqli_result $result, string $class = 'stdClass', array $constructor_args = []): object|false|null

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