PHP-Einfach.de
  • PHP Tutorial
  • MySQL Tutorial
  • Für Fortgeschrittene
  • Webhosting
  • Forum

Daten aktualisieren per UPDATE

10. Februar 2020
  1. Home
  2. »
  3. MySQL Tutorial
  4. »
  5. Daten aktualisieren per UPDATE

Daten lassen sich in MySQL aktualisieren mittels der UPDATE-Anweisung . Ähnlich wie bei WHERE können wir hier wieder die gleichen Anweisungen nutzen um zu spezifizieren, welche Einträge geändert werden sollen.

Inhaltsverzeichnis

  • 1 Update einer einzelnen Zeile
  • 2 Mehrere Einträge aktualisieren
  • 3 Mehrere Felder aktualisieren
  • 4 Auf andere Felder verweisen
  • 5 Felder inkrementieren
  • 6 Felder sortieren und Anzahl der Felder begrenzen

Update einer einzelnen Zeile

Möchte ihr eine einzelne Zeile in eurer Tabelle aktualisieren, so könnt ihr auf das Id-Feld zurückgreifen. Jeder Eintrag besitzt eine eindeutige Id, also könnt ihr ganz bewusst diesen Eintrag verändern:

1
2
3
4
5
6
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
$statement = $pdo->prepare("UPDATE users SET email = ? WHERE id = ?");
$statement->execute(array('[email protected]', 1));
?>

In diesem Beispiel wird die Tabelle users aktualisiert. Dabei wird das Feld email aktualisiert auf einen noch zu bestimmenden Wert (deswegen der Platzhalter) und zwar für alle Einträge mit einer gewissen Id. Mittels execute() wird dieses prepared Statement ausgeführt und es werden die konkreten Daten übergeben. In diesem Fall wird der Eintrag mit der Id 1 aktualisiert und für diesen wird die E-Mail-Adresse [email protected] gesetzt.

Natürlich könnt ihr die Parameter, wie bei allen prepared Statements, auch wieder benennen:

1
2
3
4
5
6
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
$statement = $pdo->prepare("UPDATE users SET email = :email_neu WHERE id = :id");
$statement->execute(array('id' => 1, 'email_neu' => '[email protected]'));
?>

Im obigen Fall haben wir die Id als ein Parameter definiert. Natürlich können wir auch eine feste Id in den Query einspeichern, z.B. wenn wir stets den Eintrag mit der Id 1 verändern wollen:

1
2
3
4
5
6
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
$statement = $pdo->prepare("UPDATE users SET email = :email_neu WHERE id = 1");
$statement->execute(array('email_neu' => '[email protected]'));
?>

Achtung: Sofern euer Update von Benutzereingaben abhängt, z.B. ihr wollt die E-Mail-Adresse eines Nutzers mit einer gewissen Id aktualisieren, dann solltet ihr diese Id stets als Parameter für execute($data) übergeben und es nicht in das SQL-Statement reinschreiben. Dies können Angreifer ausnutzen und so unter Umständen mittels SQL-Injections sensible Daten aus eurer Datenbank stehlen oder manipulieren.

Mehrere Einträge aktualisieren

Das definieren der WHERE-Klausel ist für UPDATE optional. Wenn ihr diese weglasst, dann werden alle Einträge aktualisiert. Um die Email aller Benutzer zu verändern, könnt ihr z.B. folgenden Befehl ausführen:

1
2
3
4
5
6
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
$statement = $pdo->prepare("UPDATE users SET email = :email_neu");
$statement->execute(array('email_neu' => '[email protected]'));
?>

In den meisten Fällen wollt ihr aber nur gewisse Einträge aktualisieren. Statt einem einzelnen Eintrag könnt ihr mittels der WHERE-Anweisung auch beliebige Kriterien vorgeben, welche Datensätze aktualisiert werden sollen. Um die E-Mail-Adressen von allen Einträgen mit Vorname Max zu aktualisieren, könnt ihr folgende Anweisung nutzen:

1
2
3
4
5
6
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
$statement = $pdo->prepare("UPDATE users SET email = :email_neu WHERE vorname = :vorname");
$statement->execute(array('email_neu' => '[email protected]', 'vorname' => 'Max'));
?>

Auch könnt ihr mittels AND und OR komplexere Abfragen zusammensetzen, identisch wie es im Artikel Komplexere Datenabfrage per SELECT beschrieben ist:

1
2
3
4
5
6
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
$statement = $pdo->prepare("UPDATE users SET email = :email_neu WHERE vorname = :vorname AND nachname = :nachname");
$statement->execute(array('email_neu' => '[email protected]', 'vorname' => 'Max', 'nachname' => 'Mustermann'));
?>

Mehrere Felder aktualisieren

Bisher wurde immer nur ein Feld aktualisieren. Um mehrere Felder zu aktualisieren, könnt ihr entweder mehrere SQL-Anweisungen schreiben, oder alles in eine. Dazu führt ihr im SET-Teil alle Spalten und Werte ein (per Komma getrennt), die ihr aktualisieren wollt.

1
2
3
4
5
6
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
$statement = $pdo->prepare("UPDATE users SET vorname = :vorname_neu, email = :email_neu, nachname = :nachname_neu WHERE id = :id");
$statement->execute(array('id' => 1, 'email_neu' => '[email protected]', 'vorname_neu' => 'Neuer Vorname', 'nachname_neu' => 'Neuer Nachname'));
?>

Auf andere Felder verweisen

In der UPDATE-Anweisung könnt ihr auf die Werte anderer Felder zugreifen, so kann man beispielsweise sehr einfach einem Feld den Wert eines anderen zuweisen. Auch lassen sich so die Werte eines Felds erhöhen. Möchte ihr z.B. die Anzahl der Logins von einem User erhöhen, so muss dieses Feld jeweils um den Wert 1 erhöht werden. Dies kann MySQL direkt für euch erledigen.

Im folgenden setzt ihr für den User 1 den Wert für vorname gleich dem Wert von nachname:

1
2
3
4
5
6
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
$statement = $pdo->prepare("UPDATE users SET vorname = nachname WHERE id = :id");
$statement->execute(array('id' => 1));
?>

Dies ist in diesem Fall nicht besonders sinnvoll, aber es gibt häufig Fälle in denen das nützlich sein kann. Beispielsweise fügt ihr noch eine weitere Spalte in eure bestehende Tabelle ein, z.B. die E-Mail-Adresse bei der Registrierung (die aktuelle E-Mail Adresse kann sich ja verändern). Um dann für alle Einträge die bestehende E-Mail-Adresse zu übernehmen, könnt ihr folgende Anweisung ausführen:
[code]
UPDATE users SET email_registration=email
[/code]

Schon wird für alle Benutzer der Wert in dem Feld email_registration gleich dem Wert der Spalte email gesetzt.

Felder inkrementieren

Es lassen sich in MySQL auch sehr einfach die Werte von Feldern erhöhen oder verkleinern. Möchtet ihr z.B. die Anzahl der Logins protokollieren, so müsst ihr einfach folgenden Befehl bei jedem Login ausführen:

1
2
3
4
5
6
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
$statement = $pdo->prepare("UPDATE users SET anzahl_logins = anzahl_logins+1 WHERE id = :id");
$statement->execute(array('id' => 1));
?>

Hier wird für den User 1 das Feld anzahl_logins aktualisiert, und zwar auf den Wert anzahl_logins+1. Das heißt, danach ist der Wert in dem Feld um 1 größer. Ihr könnt dort ziemlich beliebige mathematische Operationen durchführen, mit anzahl_logins-1 würde der Wert immer kleiner werden, mit anzahl_logins*2 würde sich der Wert verdoppeln und mit anzahl_logins*anzahl_logins würdet ihr das Quadrat berechnen.

Felder sortieren und Anzahl der Felder begrenzen

Identisch zu SELECT-Anweisungen können wir bei UPDATE ebenfalls ORDER BY und LIMIT verwenden. Möchten wir beispielsweise die Benutzer mit den 10 kleinsten IDs aktualisieren, geht dies wie folgt:

1
2
3
4
5
6
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
$statement = $pdo->prepare("UPDATE users SET vorname = :vorname_neu ORDER BY id LIMIT 10");
$statement->execute(array('vorname_neu' => 'Neuer Vorname'));
?>

Autor: Nils Reimers
Zurück: Daten einfügen per INSERT
Weiter: Daten löschen mittels DELETE

MySQL Tutorial

  • MySQL installieren und starten
  • phpMyAdmin
  • Verbindung aufbauen
  • Simple Datenabfrage
  • Komplexere Datenabfrage
  • Prepared Statements
  • Daten einfügen
  • Daten aktualisieren
  • Daten löschen
  • Gefundene Einträge zählen
  • DATE-Datenbankspalten
  • Datum- und Zeitfunktionen
  • MySQL Fehlermeldungen
  • Datenbankverbindung schließen
  • JOIN
  • Indizes
  • Normalformen
  • Fremdschlüssel
  • Übersicht SQL-Befehle
  • Crashkurs MySQL
  • Crashkurs MySQLi
  • Crashkurs PDO
Mit freundlicher Unterstützung von:
  • Punkt191 Werbeagentur

Hoster – Geringste Ausfallzeit

  1. webgo Ø 0 Min.
  2. netcup Ø 0 Min.
  3. Linevast Ø 3 Min.
  4. All-Inkl.com Ø 3 Min.
  5. checkdomain Ø 5 Min.
  6. dogado Ø 6 Min.
  7. Strato Ø 8 Min.
  8. manitu Ø 9 Min.
  9. 1&1 Ø 10 Min.
  10. DomainFactory Ø 13 Min.
» Mehr erfahren

Impressum | Datenschutz | Auf PHP-Einfach.de werben

© PHP-Einfach.de 2003 - 2025

Cookie-Zustimmung verwalten
Um dir ein optimales Erlebnis zu bieten, verwenden wir Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wenn du diesen Technologien zustimmst, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn du deine Zustimmung nicht erteilst oder zurückziehst, können bestimmte Merkmale und Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Anbieter verwalten Lese mehr über diese Zwecke
Einstellungen ansehen
{title} {title} {title}