MySQL Excluir Dados
Aprenda como excluir dados de um banco de dados MySQL com PHP usando instruções preparadas e a cláusula WHERE com segurança.
Excluindo Dados no MySQL com PHP
A instrução SQL DELETE remove uma ou mais linhas de uma tabela. Em PHP, você envia essa instrução ao MySQL por meio de uma conexão de banco de dados existente e — como exclusões são irreversíveis — você deve sempre filtrá-las com uma cláusula WHERE e vincular qualquer valor fornecido pelo usuário por meio de uma instrução preparada para se proteger contra injeção de SQL.
Este guia cobre o fluxo de trabalho completo com a extensão mysqli: conectar, construir o DELETE, executá-lo com segurança, ler quantas linhas foram afetadas e (opcionalmente) fechar a conexão. Também mostra o equivalente em PDO, que a maioria dos projetos modernos prefere.
A instrução DELETE em resumo
DELETE FROM table_name
WHERE column_name = 'value';table_name— a tabela da qual você deseja remover linhas.- A cláusula
WHEREdecide quais linhas serão removidas. Valores string devem ser envolvidos em aspas simples. - Omitir
WHEREexclui todas as linhas da tabela. Não há desfazer, então trate umDELETEsemWHEREcomo faria comTRUNCATE.
Se você é novo na filtragem de linhas, leia primeiro PHP MySQL Where — a mesma sintaxe de condição se aplica a DELETE, UPDATE e SELECT.
Passo 1: Conectar ao seu banco de dados MySQL
Antes de excluir qualquer coisa, você precisa de uma conexão aberta. mysqli_connect() retorna um identificador de conexão, ou false em caso de falha:
<?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());
}Substitua localhost pelo host do seu servidor, as credenciais pelo seu login e database_name pelo banco de dados que contém a tabela. Para uma visão mais detalhada das opções, consulte PHP MySQL Connect.
Passo 2: Excluir uma linha com segurança usando instrução preparada
Nunca insira diretamente um valor fornecido pelo usuário na string SQL — é assim que a injeção de SQL acontece. Em vez disso, coloque um marcador ? na consulta e vincule o valor a ele. O MySQL então trata o valor estritamente como dado, nunca como 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);Substitua users e id pela sua própria tabela e coluna. A string de tipo passada para mysqli_stmt_bind_param() deve corresponder aos valores vinculados: use "i" para o id inteiro acima, "s" para texto.
mysqli_stmt_affected_rows() informa quantas linhas foram realmente removidas. Se retornar 0, nenhuma linha correspondeu à sua cláusula WHERE — útil para distinguir "excluído" de "nada a excluir."
Passo 3: Excluir com PDO (a alternativa moderna)
PDO funciona da mesma forma e é portável entre diferentes engines de banco de dados. Marcadores nomeados tornam a intenção mais clara:
<?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() é o equivalente PDO de affected_rows. Definir ERRMODE_EXCEPTION faz o PDO lançar exceções em erros em vez de falhar silenciosamente.
Passo 4: Fechar a conexão (opcional)
PHP fecha a conexão automaticamente quando o script termina, mas você pode liberá-la antecipadamente em scripts de longa duração:
<?php
mysqli_close($conn);Armadilhas comuns
- Esquecer o
WHERE.DELETE FROM users;esvazia a tabela inteira. Sempre verifique a cláusula antes de executá-la em dados de produção. - Construir SQL com concatenação de strings.
"DELETE FROM users WHERE name = '$name'"é injetável. Use marcadores. - Assumir que uma linha foi excluída. Verifique
affected_rows/rowCount(); umWHEREsem correspondência não exclui nada e ainda "tem sucesso." - Excluir linhas das quais outra tabela depende. Uma chave estrangeira com
ON DELETE RESTRICTbloqueará a exclusão; comON DELETE CASCADEela remove as linhas relacionadas também. Conheça seu esquema primeiro. - Exclusões suaves. Quando você pode precisar dos dados de volta, adicione um sinalizador
is_deletede useUPDATEem vez disso — consulte PHP MySQL Update Data.
Conclusão
Excluir dados no MySQL com PHP é um fluxo de trabalho claro em quatro partes: conectar, preparar um DELETE parametrizado, executá-lo e ler a contagem de linhas afetadas. As regras inegociáveis são sempre delimitar a exclusão com uma cláusula WHERE e sempre vincular a entrada do usuário por meio de uma instrução preparada. Para remover as linhas correspondentes de forma diferente, compare com PHP MySQL Insert Data e PHP MySQL Select Data, ou aprofunde-se em segurança em PHP MySQL Prepared Statements.