MySQL: Anzahl geänderter Datensätze abfragen

Nach einer Änderungsabfrage in MySQL bringt die PHP-Funktion mysql_num_rows() die Anzahl der veränderten Datensätze zurück. Allerdings arbeitet MySQL hier vielleicht eine Spur anders, als Sie es erwarten. Betrachten Sie zum Beispiel folgende Abfrage, mit der Sie bei Kunden, die keine Umsätze getätigt haben, ein bestimmtes Flag setzen möchten

UPDATE kunden SET passiv=1 WHERE umsatz=0

Angenommen, 10 Kunden erfüllen dieses Kriterium und 3 wurden schon bei einem früheren Lauf auf “passiv” gesetzt. Dann, wird MySQL hier nur 7 geänderte Datensätze melden, da es die anderen 3 unverändert lassen konnte.

Um stattdessen die Anzahl der Sätze gemeldet zu bekommen, bei denen das durch WHERE gegebene Kriterium erfüllt war, muss beim Verbindungsaufbau mit dem Datenbankserver das Flag CLIENT_FOUND_ROWS gesetzt werden. Das ist allerdings in PHP nicht definiert. Verwenden Sie einfach seinen Wert 2 als vierten Parameter:

mysql_connect(‘localhost’,’user’,’passwort’,0,2);

Alle mit dieser Verbindung abgeschickten UPDATE-Abfragen schließen dann bei mysql_num_rows() auch diejenigen Datensätze mit ein, die zwar der WHERE-Bedingung entsprachen, bei denen aber nichts geändert werden musste.

Aufpassen: Erst PHP ab der Version 4.3.0 unterstützt die dafür notwendige Angabe von Verbindungs-Flags beim Befehl mysql_connect().

Ähnliche Beiträge