W3docs

MySQL Eliminare Dati

Come eliminare dati da un database MySQL con PHP usando istruzioni preparate, WHERE, mysqli e PDO in modo sicuro.

Eliminare Dati in MySQL con PHP

L'istruzione SQL DELETE rimuove una o più righe da una tabella. In PHP si invia quell'istruzione a MySQL tramite una connessione al database esistente, e — poiché le eliminazioni sono irreversibili — è sempre necessario filtrarle con una clausola WHERE e associare qualsiasi valore fornito dall'utente tramite uno statement preparato per proteggersi dall'SQL injection.

Questa guida illustra l'intero flusso di lavoro con l'estensione mysqli: connettiti, costruisci il DELETE, eseguilo in modo sicuro, leggi quante righe sono state interessate e (facoltativamente) chiudi la connessione. Mostra anche l'equivalente in PDO, preferito dalla maggior parte dei progetti moderni.

L'istruzione DELETE in sintesi

DELETE FROM table_name
WHERE column_name = 'value';
  • table_name — la tabella da cui vuoi rimuovere le righe.
  • La clausola WHERE decide quali righe eliminare. I valori stringa devono essere racchiusi tra virgolette singole.
  • Omettere WHERE elimina ogni riga nella tabella. Non esiste un'operazione di annullamento, quindi tratta un DELETE senza WHERE come faresti con TRUNCATE.

Se non hai familiarità con il filtraggio delle righe, leggi prima PHP MySQL Where — la stessa sintassi di condizione si applica a DELETE, UPDATE e SELECT.

Passo 1: Connettersi al database MySQL

Prima di eliminare qualsiasi cosa è necessaria una connessione aperta. mysqli_connect() restituisce un handle di connessione, o false in caso di errore:

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

Sostituisci localhost con l'host del tuo server, le credenziali con le tue credenziali di accesso e database_name con il database che contiene la tabella. Per uno sguardo più approfondito alle opzioni, consulta PHP MySQL Connect.

Passo 2: Eliminare una riga in modo sicuro con uno statement preparato

Non incollare mai un valore fornito dall'utente direttamente nella stringa SQL — è così che si verificano le SQL injection. Inserisci invece un segnaposto ? nella query e associa il valore ad esso. MySQL tratterà quindi il valore strettamente come dati, mai come 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);

Sostituisci users e id con la tua tabella e colonna. La stringa di tipo passata a mysqli_stmt_bind_param() deve corrispondere ai valori associati: usa "i" per l'id intero di cui sopra, "s" per il testo.

mysqli_stmt_affected_rows() indica quante righe sono state effettivamente rimosse. Se restituisce 0, nessuna riga ha corrisposto alla clausola WHERE — utile per distinguere "eliminato" da "nulla da eliminare."

Passo 3: Eliminare con PDO (l'alternativa moderna)

PDO funziona allo stesso modo ed è portabile su diversi motori di database. I segnaposto con nome rendono l'intento più chiaro:

<?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() è l'equivalente PDO di affected_rows. Impostare ERRMODE_EXCEPTION fa sì che PDO generi eccezioni sugli errori invece di fallire silenziosamente.

Passo 4: Chiudere la connessione (facoltativo)

PHP chiude la connessione automaticamente al termine dello script, ma è possibile rilasciarla in anticipo negli script a lunga esecuzione:

<?php
mysqli_close($conn);

Errori comuni

  • Dimenticare WHERE. DELETE FROM users; svuota l'intera tabella. Controlla sempre la clausola prima di eseguirla sui dati di produzione.
  • Costruire SQL con concatenazione di stringhe. "DELETE FROM users WHERE name = '$name'" è vulnerabile alle injection. Usa i segnaposto.
  • Dare per scontato che una riga sia stata eliminata. Controlla affected_rows / rowCount(); una clausola WHERE senza corrispondenza non elimina nulla e ha comunque "successo."
  • Eliminare righe da cui dipende un'altra tabella. Una chiave esterna con ON DELETE RESTRICT bloccherà l'eliminazione; con ON DELETE CASCADE rimuoverà anche le righe correlate. Conosci prima il tuo schema.
  • Soft delete. Quando potresti aver bisogno dei dati in seguito, aggiungi un flag is_deleted e usa UPDATE — vedi PHP MySQL Update Data.

Conclusione

Eliminare dati in MySQL con PHP è un flusso di lavoro chiaro in quattro parti: connettiti, prepara un DELETE parametrizzato, eseguilo e leggi il conteggio delle righe interessate. Le regole fondamentali sono: limitare sempre l'eliminazione con una clausola WHERE e associare sempre l'input dell'utente tramite uno statement preparato. Per rimuovere le righe corrispondenti in modo diverso, confronta con PHP MySQL Insert Data e PHP MySQL Select Data, oppure approfondisci la sicurezza in PHP MySQL Prepared Statements.

Practice

Pratica
Cosa è necessario per eliminare dati da MySQL in PHP?
Cosa è necessario per eliminare dati da MySQL in PHP?
Was this page helpful?