Rolf: Auswerten ob MySQL UPDATE einen Datensatz geändert hat

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

  1. 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

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. 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.