MySQL - Einfügen oder aktualisieren mit 'ON DUPLICATE KEY UPDATE'

Einfügen oder aktualisieren - eines der häufigsten Probleme, wenn es um Datenbanken geht. Wir möchten überprüfen, ob der Datensatz in der Datenbank vorhanden ist, wenn nicht, möchten wir ihn aktualisieren.

Nehmen wir ein Beispiel für eine Sternebewertung. Wir möchten die ID einfügen, wenn sie sich nicht in der Tabelle befindet, wenn sie sich bereits darin befindet aktualisieren. Einfach? Sicher! Wir können zuerst eine SELECT-Abfrage für den angegebenen Datensatz machen. Wenn es in der Datenbank ist, aktualisieren wir den Datensatz, wenn nicht, fügen wir einen neuen ein.

Mit ON DUPLICATE KEY UPDATE geht das mit einer einzigen Anfrage. Die Spalte ID muss einen UNIQUE-Schlüssel haben.

INSERT INTO table (column_list)
VALUES (value_list)
ON DUPLICATE KEY UPDATE
   c1 = v1, 
   c2 = v2,
   ...;

<?php

// ...
  // Bewertung eintragen oder aktualisieren
  
$cmd $db->prepare("INSERT INTO `sternebewertung`
  (`bewertung`, `id`) VALUES (:bewertung, :id)
  ON DUPLICATE KEY UPDATE
  `bewertung` = :bewertung;");

  if (
$cmd->execute([':bewertung' => $_POST["bewertung"],
                               
':id' => $_POST["id"]])) {
   
$status 'Sternebewertung: ' $_POST["bewertung"] . ' wurde eingetragen.';
  }
// ...
?>

Das komplette Script ist unter: CSS - Animierte Sternebewertung zu finden.

Bausteine  Alle Anzeigen

Eine zufällige Auswahl von Codeschnipseln aus den Bereichen HTML, CSS, PHP, JavaScript und MySQL.

<colgroup> Tabellenspalten vordefinieren

CSS - HTML-Elemente als Tabelle formatieren

PHP - Text rückwärts ausgeben

JavaScript - Ausgabe zeitlich steuern

MySQL - Löschen eines Datensatzes oder mehrere Datensätze

Scheinlinks
gemeint sind damit unterstrichene Wörter und Wörter in der typischen blauen Linkfarbe. Der Besucher klickt darauf und muss enttäuscht feststellen, dass es sich gar nicht um einen Link handelt.