(PHP 4, PHP 5)
mysql_affected_rows — Zwraca liczbę wierszy przetworzonych w poprzedniej operacji MySQL
$identyfikator_połączenia
] )
Pobiera liczbę wierszy przetworzonych w ostatnim zapytaniu INSERT, UPDATE, REPLACE
lub DELETE skojarzonym z identyfikator_połączenia
.
identyfikator_połączenia
Połączenie MySQL.
Jeśli identyfikator połączenia nie zostanie podany, użyte zostanie ostatnie
połączenie otwarte przez mysql_connect(). Jeśli połączenie
takie nie zostanie znalezione, funkcja spróbuje nawiązać połączenie tak, jakby
wywołana została funkcja mysql_connect() bez argumentów.
Jeśli żadne połączenie nie zostanie znalezione lub nawiązane, wygenerowany
zostanie błąd poziomu E_WARNING
.
Zwraca liczbę przetworzonych wierszy w przypadku sukcesu i -1 jeśli ostatnie zapytanie zawiedzie.
Jeżeli ostatnim zapytaniem było DELETE bez użycia klauzuli WHERE, wszystkie rekordy zostaną usunięte z tabeli, ale funkcja zwróci zero w wersjach MySQL starszych niż 4.1.2.
Podczas operacji UPDATE, MySQL nie aktualizuje kolumn w których nowa wartość jest identyczna z poprzednią. Możliwe jest zatem, że zwrócona przez mysql_affected_rows() liczba nie będzie odpowiadać liczbie wierszy pasujących do zapytania, ale tych, które zostały faktycznie zmienione.
Wyrażenie REPLACE najpierw skasuje rekord z tym samym kluczem głównym następnie wstawi nowy rekord. Ta funkcja zwraca liczbę skasowanych rekordów plus liczbę wstawionych rekordów.
Przykład #1 Przykład mysql_affected_rows()
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Nie można się połączyć: ' . mysql_error());
}
mysql_select_db('mydb');
/* to powinno zwrócić prawidłową liczbę usuniętych rekordów */
mysql_query('DELETE FROM mytable WHERE id < 10');
printf("Usuniętych rekordów: %d\n", mysql_affected_rows());
/* z klauzulą where, która nigdy nie jest prawdziwa, powinno zrwócic 0 */
mysql_query('DELETE FROM mytable WHERE 0');
printf("Usuniętych rekordów: %d\n", mysql_affected_rows());
?>
Powyższy przykład wyświetli coś podobnego do:
Usuniętych rekordów: 10 Usuniętych rekordów: 0
Przykład #2 Przykład mysql_affected_rows() używający transakcję
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Nie można się połączyć: ' . mysql_error());
}
mysql_select_db('mydb');
/* Uaktualnienie rekordów */
mysql_query("UPDATE mytable SET used=1 WHERE id < 10");
printf ("Zaktualizowanych rekordów: %d\n", mysql_affected_rows());
mysql_query("COMMIT");
?>
Powyższy przykład wyświetli coś podobnego do:
Zaktualizowanych rekordów: 10
Informacja: Transakcje
Jeśli używasz transakcji musisz wywołać mysql_affected_rows() po Twoim zapytaniu INSERT, UPDATE lub DELETE, a nie po COMMIT.
Informacja: Instrukcja SELECT
Aby uzyskać liczbę wierszy zwróconych przez SELECT, można użyć use mysql_num_rows().
Informacja: Kaskadowe klucze obce
mysql_affected_rows() nie zwraca liczby wierszy przetworzonych pośrednio przez użycie klauzuli ON DELETE CASCADE i/lub ON UPDATE CASCADE w ograniczeniach kluczy obcych.