Auswerten ob MySQL UPDATE einen Datensatz geändert hat
Rolf
- php
Hi,
ich mache ein UPDATE auf einer MySQL Tabelle:
$sql = "UPDATE meineTabelle SET foo='bar' WHERE ...";
$result = $db->query($sql);
Nun brauche ich die Information, ob das UPDATE einen oder meherer Datensätze geändert hat. Also die Antwort meiner Datenbank, wie z.B.:
Query OK, 0 rows affected (0.01 sec)
Rows matched: 26 Changed: 0 Warnings: 0
Das Steckt doch bstimmt in $result, wie komme ich da ran?
MfG
Rolf
Hello,
ich mache ein UPDATE auf einer MySQL Tabelle:
$sql = "UPDATE meineTabelle SET foo='bar' WHERE ...";
$result = $db->query($sql);
>
> Nun brauche ich die Information, ob das UPDATE einen oder meherer Datensätze geändert hat. Also die Antwort meiner Datenbank, wie z.B.:
> ~~~sql
> Query OK, 0 rows affected (0.01 sec)
> Rows matched: 26 Changed: 0 Warnings: 0
Das Steckt doch bstimmt in $result, wie komme ich da ran?
Das einfachste wird sein, wenn Du dir erstmal alle MySQL-Funktionen aschaust, die die PHP-APIs bieten:
http://de.php.net/manual/en/book.mysql.php
http://de.php.net/manual/en/book.mysqli.php
Dann stößt Du eher früher als später bestimmt auch auf
http://de.php.net/manual/en/function.mysql-affected-rows.php
http://de.php.net/manual/en/mysqli.affected-rows.php
Und schau Dir die Beispiele an. Denn nur wenn das Result !== false ist, steht was sinnvolles drin.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Tach!
http://de.php.net/manual/en/function.mysql-affected-rows.php
http://de.php.net/manual/en/mysqli.affected-rows.php
Und schau Dir die Beispiele an. Denn nur wenn das Result !== false ist, steht was sinnvolles drin.
mysql_query() liefert im Fehlerfall ein false, die genannten Funktionen laut Handbuch nicht. Sie sind ja auch nur Folgefunktionen, deren Aufruf bei einer gescheiterten Query nicht mehr sinnvoll ist.
Es gibt aber noch einen Haken. MySQL ändert einen Datensatz nicht, wenn die upzudatenden Werte bereits eingetragen sind. Das zählt dann auch nicht als "affected row". Es gibt jedoch das Flag MYSQLI_CLIENT_FOUND_ROWS für mysqli_real_connect(), mit dem dann solche Fälle doch gezählt werden.
dedlfix.