Mueller: PDO: Ergebnis von rowCount()

Hallo,

ich nutze für Datenbankabfragen (MySQL 5) PDO und habe folgendes Problem: wenn ich ein UPDATE ausführe, liefert rowCount() die Anzahl der betroffenen Zeilen, die auch dann 0 ist, wenn zwar betroffene Einträge gefunden wurden, jedoch ein Update aufgrund identischer Werte nicht ausgeführt wird.

Genau diesen Wert benötige ich aber! D.h. wie bekommt man die Anzahl der betroffenen Zeilen heraus, auch wenn letztlich kein Wert überschrieben wird (quasi um zu prüfen wie viele Zeilen die WHERE Bedingung des UPDATE Befehls erfüllen)?

Habe hierzu ein Feature-Request im Bug-Tracker auf php.net gefunden, vielleicht gibt es aber auch eine andere Möglichkeit (ohne eine zweite Abfrage ausführen zu müssen).

Gruß
Mueller

  1. echo $begrüßung;

    ich nutze für Datenbankabfragen (MySQL 5) PDO und habe folgendes Problem: wenn ich ein UPDATE ausführe, liefert rowCount() die Anzahl der betroffenen Zeilen, die auch dann 0 ist, wenn zwar betroffene Einträge gefunden wurden, jedoch ein Update aufgrund identischer Werte nicht ausgeführt wird.

    Das ist ein Feature des UPDATE-Statements von MySQL. Die MySQL-API-Funktion mysql_affected_rows() liefert nur dann die laut WHERE betroffene Anzahl statt der tatsächlich geänderten Datensätze, wenn beim Connect das Flag CLIENT_FOUND_ROWS gesetzt wurde. Das lässt sich aber nur dann setzen, wenn man die mysqli-Extension verwendet und die Verbindung mit mysqli_real_connect() aufbaut. Das PHP-Handbuch erwähnt meines Wissens nach keine Möglichkeit dieses Flag für PDO zu setzen. Es gibt aber einen Bugreport (Bug #44135 PDO MySQL does not support CLIENT_FOUND_ROWS), nach dem das Problem zwar bereits gelöst ist, die Korrektur jedoch noch nicht in einer offiziellen PHP-Version Einzug gefunden hat.

    echo "$verabschiedung $name";

    1. Hi,

      den Bug Report habe ich auch schon gelesen, dann muss ich mich wohl noch ein bisschen gedulden, bis der Fix veröffentlicht wird. Ich meine gelesen zu haben, dass das in PHP Version 5.3 geschehen wird.

      Danke für die ausführliche Antwort zu diesem Thema!!

      Viele Grüße
      Mueller