W3docs

MySQL Daten löschen

Erfahren Sie, wie Sie mit PHP Daten aus einer MySQL-Datenbank löschen — sicher mit prepared statements und WHERE-Klausel.

Daten in MySQL mit PHP löschen

Die SQL-Anweisung DELETE entfernt eine oder mehrere Zeilen aus einer Tabelle. In PHP senden Sie diese Anweisung über eine bestehende Datenbankverbindung an MySQL — und da Löschvorgänge irreversibel sind, sollten Sie sie immer mit einer WHERE-Klausel filtern und jeden vom Benutzer angegebenen Wert über ein prepared statement binden, um SQL-Injection zu verhindern.

Dieser Leitfaden behandelt den vollständigen Ablauf mit der mysqli-Erweiterung: verbinden, das DELETE erstellen, es sicher ausführen, die Anzahl der betroffenen Zeilen ermitteln und die Verbindung (optional) schließen. Er zeigt auch das Äquivalent in PDO, das die meisten modernen Projekte bevorzugen.

Die DELETE-Anweisung auf einen Blick

DELETE FROM table_name
WHERE column_name = 'value';
  • table_name — die Tabelle, aus der Sie Zeilen entfernen möchten.
  • Die WHERE-Klausel bestimmt, welche Zeilen gelöscht werden. String-Werte müssen in einfache Anführungszeichen eingeschlossen werden.
  • Lassen Sie WHERE weg, löschen Sie jede Zeile in der Tabelle. Es gibt keinen Rückgängig-Vorgang, also behandeln Sie ein DELETE ohne WHERE wie TRUNCATE.

Wenn Sie neu beim Filtern von Zeilen sind, lesen Sie zuerst PHP MySQL Where — dieselbe Bedingungssyntax gilt für DELETE, UPDATE und SELECT.

Schritt 1: Mit Ihrer MySQL-Datenbank verbinden

Bevor Sie etwas löschen, benötigen Sie eine offene Verbindung. mysqli_connect() gibt ein Verbindungs-Handle zurück oder false bei einem Fehler:

<?php
$servername = "localhost";
$username   = "username";
$password   = "password";
$dbname     = "database_name";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

Ersetzen Sie localhost durch Ihren Server-Host, die Anmeldedaten durch Ihren Login und database_name durch die Datenbank, die die Tabelle enthält. Einen ausführlicheren Überblick über die Optionen finden Sie unter PHP MySQL Connect.

Schritt 2: Eine Zeile sicher mit einem prepared statement löschen

Fügen Sie niemals einen vom Benutzer angegebenen Wert direkt in den SQL-String ein — so entsteht SQL-Injection. Setzen Sie stattdessen einen ?-Platzhalter in die Abfrage und binden Sie den Wert daran. MySQL behandelt den Wert dann ausschließlich als Daten, niemals als SQL.

<?php
// 1. Prepare the DELETE with a placeholder
$stmt = mysqli_prepare($conn, "DELETE FROM users WHERE id = ?");

// 2. Bind the value: "i" = integer, "s" = string, "d" = double, "b" = blob
$id = 42; // e.g. the id of the record to remove
mysqli_stmt_bind_param($stmt, "i", $id);

// 3. Execute and report the result
if (mysqli_stmt_execute($stmt)) {
    $deleted = mysqli_stmt_affected_rows($stmt);
    echo "Deleted {$deleted} record(s).";
} else {
    echo "Error deleting record: " . mysqli_stmt_error($stmt);
}

mysqli_stmt_close($stmt);

Ersetzen Sie users und id durch Ihre eigene Tabelle und Spalte. Der Typ-String, der an mysqli_stmt_bind_param() übergeben wird, muss mit den gebundenen Werten übereinstimmen: Verwenden Sie "i" für die Integer-ID oben, "s" für Text.

mysqli_stmt_affected_rows() zeigt Ihnen, wie viele Zeilen tatsächlich entfernt wurden. Wenn es 0 zurückgibt, hat keine Zeile Ihrer WHERE-Klausel entsprochen — nützlich, um „gelöscht" von „nichts zu löschen" zu unterscheiden.

Schritt 3: Mit PDO löschen (die moderne Alternative)

PDO funktioniert auf dieselbe Weise und ist über verschiedene Datenbank-Engines portierbar. Benannte Platzhalter machen die Absicht klarer:

<?php
$pdo = new PDO("mysql:host=localhost;dbname=database_name", "username", "password");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->prepare("DELETE FROM users WHERE id = :id");
$stmt->execute([':id' => 42]);

echo $stmt->rowCount() . " record(s) deleted.";

rowCount() ist PDOs Äquivalent zu affected_rows. Das Setzen von ERRMODE_EXCEPTION lässt PDO bei Fehlern eine Exception werfen, anstatt still zu scheitern.

Schritt 4: Die Verbindung schließen (optional)

PHP schließt die Verbindung automatisch, wenn das Skript endet, aber Sie können sie bei lang laufenden Skripten frühzeitig freigeben:

<?php
mysqli_close($conn);

Häufige Fallstricke

  • WHERE vergessen. DELETE FROM users; leert die gesamte Tabelle. Überprüfen Sie die Klausel immer, bevor Sie sie auf Produktionsdaten ausführen.
  • SQL mit String-Verkettung aufbauen. "DELETE FROM users WHERE name = '$name'" ist anfällig für Injection. Verwenden Sie stattdessen Platzhalter.
  • Annehmen, dass eine Zeile gelöscht wurde. Überprüfen Sie affected_rows / rowCount(); ein nicht übereinstimmendes WHERE löscht nichts und „gelingt" trotzdem.
  • Zeilen löschen, von denen eine andere Tabelle abhängt. Ein Fremdschlüssel mit ON DELETE RESTRICT blockiert das Löschen; mit ON DELETE CASCADE werden auch die verknüpften Zeilen entfernt. Kennen Sie zuerst Ihr Schema.
  • Soft-Deletes. Wenn Sie die Daten möglicherweise zurückbrauchen, fügen Sie ein is_deleted-Flag hinzu und verwenden Sie stattdessen UPDATE — siehe PHP MySQL Update Data.

Fazit

Das Löschen von Daten in MySQL mit PHP ist ein klarer, vierstufiger Ablauf: verbinden, ein parametrisiertes DELETE vorbereiten, es ausführen und die Anzahl der betroffenen Zeilen lesen. Die unverzichtbaren Regeln sind: den Löschvorgang immer mit einer WHERE-Klausel eingrenzen und Benutzereingaben immer über ein prepared statement binden. Um die gefundenen Zeilen anders zu verarbeiten, vergleichen Sie mit PHP MySQL Insert Data und PHP MySQL Select Data, oder vertiefen Sie das Thema Sicherheit unter PHP MySQL Prepared Statements.

Practice

Übung
Was ist notwendig, um Daten aus MySQL in PHP zu löschen?
Was ist notwendig, um Daten aus MySQL in PHP zu löschen?
Was this page helpful?