Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Unterscheiden Sie zwischen „keine Zeilen waren betroffen“ und Zeilen, die erfolgreich AKTUALISIERT wurden – auf denselben Wert (MySQL und PHP)

Eine einfache Lösung wären zwei Abfragen.

Führen Sie zuerst eine SELECT-Abfrage aus, um zu prüfen, ob die Zeile mit mysqli_num_rows() existiert.

Wenn die Zeile existiert, können Sie dann die UPDATE-Abfrage ausführen und mysqli_affected_rows() verwenden.

[BEARBEITEN]

... Ich schlage jedem, der nach einem einzigen Anruf sucht, eine mögliche Alternative vor. Ich weiß nicht, ob Sie an INSERTs oder reinen UPDATEs interessiert sind. Unten finden Sie einige Denkanstöße:

Vom obersten Kommentar @ http://php.net/manual/en/ mysqli.affected-rows.php :

Obwohl man bei "INSERT INTO ON DUPLICATE KEY UPDATE"-Abfragen erwarten kann, dass "betroffene_Zeilen" bei erfolgreichen Abfragen nur 0 oder 1 pro Zeile zurückgibt, kann es tatsächlich 2 zurückgeben.

Aus dem MySQL-Handbuch:"Bei ON DUPLICATE KEY UPDATE ist der Wert der betroffenen Zeilen pro Zeile 1, wenn die Zeile als neue Zeile eingefügt wird, und 2, wenn eine vorhandene Zeile aktualisiert wird."

Siehe:http://dev.mysql.com /doc/refman/5.0/en/insert-on-duplicate.html

Hier ist die Aufschlüsselung der Summe pro Zeile :

+0:​​Eine Zeile wurde nicht aktualisiert oder eingefügt (wahrscheinlich, weil die Zeile bereits existierte, aber während des UPDATE tatsächlich keine Feldwerte geändert wurden)

+1:Eine Zeile wurde eingefügt

+2:Eine Zeile wurde aktualisiert

Können Sie das Ihren Bedürfnissen anpassen?