W3docs

Supprimer des données MySQL

Apprenez à supprimer des données dans une base MySQL avec PHP en utilisant des instructions préparées et la clause WHERE pour éviter les injections SQL.

Supprimer des données dans MySQL avec PHP

L'instruction SQL DELETE supprime une ou plusieurs lignes d'une table. En PHP, vous envoyez cette instruction à MySQL via une connexion de base de données existante et — comme les suppressions sont irréversibles — vous devez toujours les filtrer avec une clause WHERE et lier toute valeur fournie par l'utilisateur via une instruction préparée pour se protéger contre les injections SQL.

Ce guide couvre le flux de travail complet avec l'extension mysqli : connexion, construction du DELETE, exécution sécurisée, lecture du nombre de lignes affectées et (optionnellement) fermeture de la connexion. Il présente également l'équivalent en PDO, que la plupart des projets modernes préfèrent.

L'instruction DELETE en un coup d'œil

DELETE FROM table_name
WHERE column_name = 'value';
  • table_name — la table dont vous souhaitez supprimer des lignes.
  • La clause WHERE détermine quelles lignes sont supprimées. Les valeurs de type chaîne doivent être entourées de guillemets simples.
  • Omettre WHERE supprime toutes les lignes de la table. Il n'y a pas d'annulation, traitez donc un DELETE sans WHERE comme vous le feriez avec TRUNCATE.

Si vous débutez avec le filtrage de lignes, lisez d'abord PHP MySQL Where — la même syntaxe de conditions s'applique à DELETE, UPDATE et SELECT.

Étape 1 : Se connecter à votre base de données MySQL

Avant de supprimer quoi que ce soit, vous avez besoin d'une connexion ouverte. mysqli_connect() retourne un handle de connexion, ou false en cas d'échec :

<?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());
}

Remplacez localhost par l'hôte de votre serveur, les identifiants par vos informations de connexion et database_name par la base de données contenant la table. Pour un aperçu plus approfondi des options, consultez PHP MySQL Connect.

Étape 2 : Supprimer une ligne en toute sécurité avec une instruction préparée

Ne collez jamais une valeur fournie par l'utilisateur directement dans la chaîne SQL — c'est ainsi que se produisent les injections SQL. Mettez plutôt un espace réservé ? dans la requête et liez la valeur à celui-ci. MySQL traite alors la valeur strictement comme une donnée, jamais comme du 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);

Remplacez users et id par votre propre table et colonne. La chaîne de type passée à mysqli_stmt_bind_param() doit correspondre aux valeurs liées : utilisez "i" pour l'identifiant entier ci-dessus, "s" pour le texte.

mysqli_stmt_affected_rows() vous indique combien de lignes ont été réellement supprimées. S'il retourne 0, aucune ligne ne correspondait à votre clause WHERE — utile pour distinguer "supprimé" de "rien à supprimer".

Étape 3 : Supprimer avec PDO (l'alternative moderne)

PDO fonctionne de la même façon et est portable entre les moteurs de bases de données. Les espaces réservés nommés rendent l'intention plus claire :

<?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() est l'équivalent PDO de affected_rows. Définir ERRMODE_EXCEPTION amène PDO à lever des exceptions en cas d'erreur plutôt qu'à échouer silencieusement.

Étape 4 : Fermer la connexion (optionnel)

PHP ferme automatiquement la connexion à la fin du script, mais vous pouvez la libérer plus tôt dans les scripts de longue durée :

<?php
mysqli_close($conn);

Pièges courants

  • Oublier WHERE. DELETE FROM users; vide toute la table. Vérifiez toujours la clause avant de l'exécuter sur des données de production.
  • Construire le SQL par concaténation de chaînes. "DELETE FROM users WHERE name = '$name'" est injectable. Utilisez des espaces réservés à la place.
  • Supposer qu'une ligne a été supprimée. Vérifiez affected_rows / rowCount() ; un WHERE sans correspondance ne supprime rien et "réussit" quand même.
  • Supprimer des lignes dont dépend une autre table. Une clé étrangère avec ON DELETE RESTRICT bloquera la suppression ; avec ON DELETE CASCADE, elle supprime également les lignes associées. Connaissez d'abord votre schéma.
  • Suppressions logiques. Lorsque vous pourriez avoir besoin de récupérer les données, ajoutez un drapeau is_deleted et utilisez UPDATE à la place — voir PHP MySQL Update Data.

Conclusion

Supprimer des données dans MySQL avec PHP est un flux de travail en quatre étapes : connexion, préparation d'un DELETE paramétré, exécution et lecture du nombre de lignes affectées. Les règles non négociables sont de toujours limiter la suppression avec une clause WHERE et de toujours lier les entrées utilisateur via une instruction préparée. Pour gérer différemment les lignes correspondantes, comparez avec PHP MySQL Insert Data et PHP MySQL Select Data, ou approfondissez la sécurité dans PHP MySQL Prepared Statements.

Practice

Pratique
Qu'est-ce qui est nécessaire pour supprimer des données de MySQL en PHP ?
Qu'est-ce qui est nécessaire pour supprimer des données de MySQL en PHP ?
Was this page helpful?