(PHP 4, PHP 5)
mysql_affected_rows — Liefert die Anzahl betroffener Datensätze einer vorhergehenden MySQL-Operation
Diese Erweiterung ist seit PHP 5.5.0 als veraltet markiert und wurde in PHP 7.0.0 entfernt. Verwenden Sie stattdessen die Erweiterungen MySQLi oder PDO_MySQL. Weitere Informationen bietet der Ratgeber MySQL: Auswahl einer API. Alternativen zu dieser Funktion umfassen:
Gibt die Anzahl der Datensätze zurück, die von der letzten INSERT-
UPDATE-, REPLACE- oder DELETE-Abfrage in Verbindung mit
link_identifier
betroffen waren.
link_identifier
Die MySQL-Verbindung.
Wird die Verbindungskennung nicht angegeben, wird die letzte durch
mysql_connect() geöffnete Verbindung angenommen. Falls
keine solche Verbindung gefunden wird, wird versucht, eine Verbindung
aufzubauen, wie es beim Aufruf von mysql_connect() ohne
Angabe von Argumenten der Fall wäre. Falls zufällig keine Verbindung gefunden
oder aufgebaut werden kann, wird eine Warnung der Stufe
E_WARNING
erzeugt.
Gibt bei Erfolg die Anzahl betroffener Datensätze und zurück -1 falls die letzte Abfrage fehlschlug.
War die letzte Abfrage ein DELETE-Anweisung ohne WHERE-Bedingung, wurden alle Datensätze aus der Tabelle gelöscht. Für MySQL-Versionen vor 4.1.2 wird diese Funktion hier aber Null (0) zurückgeben.
Verwenden Sie UPDATE, wird MySQL keine Spalten aktualisieren, bei denen der neue Wert dem alten entspricht. Das kann dazu führen, dass mysql_affected_rows() nicht die tatsächliche Anzahl der betroffenen Zeilen zurückgibt, sondern nur die, die tatsächlich von der Abfrage betroffen sind.
REPLACE-Anfragen löschen zunächst den Eintrag mit dem gleichen Primärschlüssel und fügen dann den neuen Eintrag ein. Diese Funktion gibt in diesem Fall die Summe aus gelöschten und eingefügten Einträgen zurück.
Im Falle von "INSERT ... ON DUPLICATE KEY UPDATE"-Anweisungen ist der
Rückgabewert 1
, wenn eine Einfügung vorgenommen wurde
oder 2
, wenn eine bestehende Zeile aktualisiert wurde.
Beispiel #1 mysql_affected_rows()-Beispiel
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Keine Verbindung möglich: ' . mysql_error());
}
mysql_select_db('mydb');
/* dies sollte die korrekte Anzahl gelöschter Datensätze zurückgeben */
mysql_query('DELETE FROM mytable WHERE id < 10');
printf("Gelöschte Datensätze: %d\n", mysql_affected_rows());
/* mit einer WHERE Bedingung, die niemals wahr ist, sollte 0 zurückgegeben
werden */
mysql_query('DELETE FROM mytable WHERE 0');
printf("Gelöschte Datensätze: %d\n", mysql_affected_rows());
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Gelöschte Datensätze: 10 Gelöschte Datensätze: 0
Beispiel #2 mysql_affected_rows()-Beispiel mit Transaktionen
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('keine Verbindung möglich: ' . mysql_error());
}
mysql_select_db('mydb');
/* Update der Datensätze */
mysql_query("UPDATE mytable SET used=1 WHERE id < 10");
printf ("Aktualisierte Datensätze: %d\n", mysql_affected_rows());
mysql_query("COMMIT");
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Aktualisierte Datensätze: 10
Hinweis: Transaktionen
Falls Sie Transaktionen verwenden, müssen Sie mysql_affected_rows() unmittelbar nach Ihrer INSERT-, UPDATE-, oder DELETE-Abfrage aufrufen, nicht nach dem Commit.
Hinweis: SELECT Anweisungen
Um die Anzahl der gelieferten Datensätze einer SELECT-Abfrage zu erhalten, verwenden Sie stattdessen die Funktion mysql_num_rows().
Hinweis: Kaskadierende Fremdschlüssel-Beziehungen
mysql_affected_rows() zählt keine Zeilen, die implizit durch die Verwendung von ON DELETE CASCADE und/oder ON UPDATE CASCADE in Fremdschlüssel-Bedingungen betroffen sind.