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
0ca pe o eroare după unUPDATE. 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_rowsse 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.