W3docs

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 WHERE decide quais linhas serão removidas. Valores string devem ser envolvidos em aspas simples.
  • Omitir WHERE exclui todas as linhas da tabela. Não há desfazer, então trate um DELETE sem WHERE como faria com TRUNCATE.

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(); um WHERE sem correspondência não exclui nada e ainda "tem sucesso."
  • Excluir linhas das quais outra tabela depende. Uma chave estrangeira com ON DELETE RESTRICT bloqueará a exclusão; com ON DELETE CASCADE ela 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_deleted e use UPDATE em 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.

Practice

Prática
O que é necessário para excluir dados do MySQL em PHP?
O que é necessário para excluir dados do MySQL em PHP?
Was this page helpful?