MySQL Funkcje
PHP Manual

mysql_affected_rows

(PHP 4, PHP 5)

mysql_affected_rowsZwraca liczbę wierszy przetworzonych w poprzedniej operacji MySQL

Opis

int mysql_affected_rows ([ resource $identyfikator_połączenia ] )

Pobiera liczbę wierszy przetworzonych w ostatnim zapytaniu INSERT, UPDATE, REPLACE lub DELETE skojarzonym z identyfikator_połączenia.

Parametry

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.

Zwracane wartości

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łady

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

Notatki

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.

Zobacz też:


MySQL Funkcje
PHP Manual