mysqli_affected_rows în PHP

Returnează câte rânduri au fost modificate de ultimul INSERT, UPDATE, DELETE sau REPLACE.

Sintaxă
mysqli_affected_rows(mysqli $mysql): string|int

Ce face mysqli_affected_rows

După o comandă care modifică datele, mysqli_affected_rows spune câte rânduri au fost atinse. Primește conexiunea, nu rezultatul, și se referă la ultima interogare rulată pe acea conexiune.

La UPDATE, MySQL numără doar rândurile care chiar s-au schimbat: dacă pui aceeași valoare care exista deja, rezultatul este 0. Valoarea -1 înseamnă că ultima interogare a eșuat. Pentru interogări pregătite există mysqli_stmt_affected_rows($stmt).

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 pe care a rulat interogarea.

Ce returnează

Numărul de rânduri modificate, 0 dacă nu s-a schimbat nimic sau -1 la eroare.

Exemple

Exemplul 1: UPDATE și DELETE

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

mysqli_query($conn, "UPDATE produse SET pret = pret * 0.9 WHERE pret > 500");
echo "Reduceri aplicate: " . mysqli_affected_rows($conn) . "\n";

mysqli_query($conn, "DELETE FROM produse WHERE stoc = 0");
echo "Produse șterse: " . mysqli_affected_rows($conn);

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

Reduceri aplicate: 2
Produse șterse: 1

Exemplul 2: Aceeași valoare înseamnă 0 rânduri

Mouse-ul are deja prețul 80, deci MySQL nu are nimic de schimbat.

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

mysqli_execute_query($conn, "UPDATE produse SET pret = ? WHERE id = ?", [80, 2]);
echo mysqli_affected_rows($conn) . "\n";

mysqli_execute_query($conn, "UPDATE produse SET pret = ? WHERE id = ?", [75, 2]);
echo mysqli_affected_rows($conn);

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

0
1

Greșeli frecvente

  • Tratezi 0 ca pe o eroare după un UPDATE. Poate însemna doar că datele erau deja aceleași. Erorile reale aruncă excepții (PHP 8.1+) sau dau -1.
  • Rulezi altă interogare înainte să citești numărul. mysqli_affected_rows se referă mereu la ultima interogare de pe conexiune.

Comenzi înrudite

  • mysqli_num_rows: Returnează numărul de rânduri dintr-un rezultat SELECT.
  • mysqli_query: Trimite o interogare SQL către baza de date. Pentru SELECT returnează un rezultat din care citești rândurile.
  • mysqli_insert_id: Returnează id-ul generat automat (AUTO_INCREMENT) de ultimul INSERT.
  • mysqli_prepare: Pregătește o interogare SQL cu semne ? în loc de valori. Este metoda sigură împotriva SQL injection.