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
WHEREdecide quali righe eliminare. I valori stringa devono essere racchiusi tra virgolette singole. - Omettere
WHEREelimina ogni riga nella tabella. Non esiste un'operazione di annullamento, quindi tratta unDELETEsenzaWHEREcome faresti conTRUNCATE.
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 clausolaWHEREsenza corrispondenza non elimina nulla e ha comunque "successo." - Eliminare righe da cui dipende un'altra tabella. Una chiave esterna con
ON DELETE RESTRICTbloccherà l'eliminazione; conON DELETE CASCADErimuoverà anche le righe correlate. Conosci prima il tuo schema. - Soft delete. Quando potresti aver bisogno dei dati in seguito, aggiungi un flag
is_deletede usaUPDATE— 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.