Fundamentos do PHP

0/25 aulas0%
pratica

Operações CRUD II: UPDATE e DELETE com PDO

Aprenda sobre operações crud ii: update e delete com pdo

50 min
Aula 3 de 5

🚀 Módulo 5: Persistência de Dados e Projeto Final

Aula: Operações CRUD II: UPDATE e DELETE com PDO (Prática)

Olá! 👋 Na aula anterior, exploramos as operações de Create e Read do CRUD (Criar e Ler) usando PDO. Hoje, vamos mergulhar nas operações restantes: Update (Atualizar) e Delete (Excluir). Estas são cruciais para a manutenção de dados em qualquer aplicação!

Assim como no INSERT e SELECT, a segurança é nossa prioridade máxima. Usaremos Prepared Statements para proteger nossas aplicações contra ataques de injeção SQL.


🎯 Objetivos da Aula

Ao final desta aula, você será capaz de:

  • Compreender e implementar a operação UPDATE usando PDO.
  • Compreender e implementar a operação DELETE usando PDO.
  • Utilizar Prepared Statements para garantir a segurança das operações de atualização e exclusão.
  • Aplicar boas práticas de manipulação de erros com PDO.

1. Introdução Clara: Atualizando e Excluindo Dados 🛠️🗑️

Em um sistema real, os dados não são estáticos. Usuários mudam seus e-mails, senhas, ou até mesmo são removidos do sistema. É aqui que UPDATE e DELETE entram em jogo.

  • UPDATE: Modifica registros existentes em uma tabela. Imagine um usuário atualizando seu perfil: o nome, e-mail ou senha são alterados.
  • DELETE: Remove registros existentes de uma tabela. Pense em um usuário que decide excluir sua conta.

Ambas as operações são poderosas e, se usadas incorretamente (especialmente sem a cláusula WHERE), podem causar perda de dados catastrófica! Por isso, a cautela e os Prepared Statements são essenciais.


2. Explicação Detalhada com Exemplos

Vamos usar uma tabela de exemplo usuarios para todas as nossas operações:

CREATE TABLE usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL UNIQUE,
    senha VARCHAR(255) NOT NULL,
    data_cadastro DATETIME DEFAULT CURRENT_TIMESTAMP
);

2.1. Conexão com o Banco de Dados (Revisão)

Para todos os exemplos, assumiremos que você tem um arquivo de conexão como este:

// db_connection.php
<?php
$host = 'localhost';
$db   = 'meu_banco_de_dados'; // Altere para o nome do seu banco
$user = 'root';              // Altere para seu usuário
$pass = '';                  // Altere para sua senha
$charset = 'utf8mb4';
 
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION, // Lança exceções em caso de erro
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,       // Retorna arrays associativos por padrão
    PDO::ATTR_EMULATE_PREPARES   => false,                  // Desabilita emulação de prepared statements (melhor para segurança)
];
 
try {
    $pdo = new PDO($dsn, $user, $pass, $options);
    // echo "Conexão bem-sucedida!"; // Para depuração
} catch (\PDOException $e) {
    throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
?>

2.2. Operação UPDATE: Modificando Registros ✏️

A sintaxe SQL para UPDATE é:

UPDATE nome_da_tabela
SET coluna1 = valor1, coluna2 = valor2, ...
WHERE condicao;

⚠️ Atenção: Sem a cláusula WHERE, todos os registros da tabela seriam atualizados!

Exemplo Prático com PDO:

Vamos atualizar o e-mail de um usuário específico.

// update_usuario.php
<?php
require_once 'db_connection.php'; // Inclui nosso arquivo de conexão
 
try {
    // Dados para atualização
    $novoEmail = 'novo.email@exemplo.com';
    $idUsuario = 1; // ID do usuário que queremos atualizar
 
    // 1. Prepara a query SQL com placeholders nomeados
    $stmt = $pdo->prepare("UPDATE usuarios SET email = :email WHERE id = :id");
 
    // 2. Bind dos parâmetros
    $stmt->bindParam(':email', $novoEmail, PDO::PARAM_STR);
    $stmt->bindParam(':id', $idUsuario, PDO::PARAM_INT);
 
    // 3. Executa a query
    $stmt->execute();
 
    // Verifica quantas linhas foram afetadas
    $linhasAfetadas = $stmt->rowCount();
 
    if ($linhasAfetadas > 0) {
        echo "Usuário com ID {$idUsuario} atualizado com sucesso. Linhas afetadas: {$linhasAfetadas}.";
    } else {
        echo "Nenhum usuário com ID {$idUsuario} encontrado ou nenhum dado para atualizar.";
    }
 
} catch (PDOException $e) {
    echo "Erro ao atualizar usuário: " . $e->getMessage();
}
?>

Explicação:

  • $pdo->prepare(...): Cria um objeto PDOStatement a partir da query SQL. Usamos :email e :id como placeholders.
  • $stmt->bindParam(...): Vincula os valores das variáveis PHP aos placeholders na query preparada. É crucial especificar o tipo de dado (PDO::PARAM_STR, PDO::PARAM_INT, etc.) para segurança e otimização.
  • $stmt->execute(): Executa a query com os valores vinculados.
  • $stmt->rowCount(): Retorna o número de linhas afetadas pela última instrução SQL (útil para saber se a atualização realmente ocorreu).

2.3. Operação DELETE: Excluindo Registros 🗑️

A sintaxe SQL para DELETE é:

DELETE FROM nome_da_tabela
WHERE condicao;

⚠️ Atenção: Sem a cláusula WHERE, todos os registros da tabela seriam excluídos!

Exemplo Prático com PDO:

Vamos excluir um usuário específico pelo seu ID.

// delete_usuario.php
<?php
require_once 'db_connection.php'; // Inclui nosso arquivo de conexão
 
try {
    // ID do usuário a ser excluído
    $idUsuarioParaExcluir = 2;
 
    // 1. Prepara a query SQL com um placeholder nomeado
    $stmt = $pdo->prepare("DELETE FROM usuarios WHERE id = :id");
 
    // 2. Bind do parâmetro
    $stmt->bindParam(':id', $idUsuarioParaExcluir, PDO::PARAM_INT);
 
    // 3. Executa a query
    $stmt->execute();
 
    // Verifica quantas linhas foram afetadas
    $linhasAfetadas = $stmt->rowCount();
 
    if ($linhasAfetadas > 0) {
        echo "Usuário com ID {$idUsuarioParaExcluir} excluído com sucesso. Linhas afetadas: {$linhasAfetadas}.";
    } else {
        echo "Nenhum usuário com ID {$idUsuarioParaExcluir} encontrado para exclusão.";
    }
 
} catch (PDOException $e) {
    echo "Erro ao excluir usuário: " . $e->getMessage();
}
?>

Explicação:

  • O processo é muito similar ao UPDATE. Preparamos a query, vinculamos o ID do usuário ao placeholder :id e executamos.
  • $stmt->rowCount() é novamente útil para verificar se a exclusão foi bem-sucedida.

3. Código de Exemplo Oficial (Melhores Práticas) 📚

A documentação oficial do PHP para PDO não fornece um único "exemplo oficial" para um fluxo completo de CRUD, mas sim demonstrações de uso para cada método. Os exemplos acima seguem as melhores práticas recomendadas pela documentação e pela comunidade PHP para segurança e robustez:

  • Prepared Statements: Essencial para prevenir injeção SQL.
  • Tratamento de Erros com Exceções: PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION é o padrão ouro para lidar com erros de banco de dados, tornando o código mais limpo e fácil de depurar.
  • Tipagem de Parâmetros: Usar PDO::PARAM_STR, PDO::PARAM_INT, etc., com bindParam ajuda o driver do banco de dados a otimizar a query e adiciona uma camada extra de segurança.
  • PDO::ATTR_EMULATE_PREPARES => false: Garante que o driver do banco de dados (e não o PHP) prepare a query, o que é mais seguro e eficiente na maioria dos casos.

4. Integração (Não Aplicável Diretamente Aqui)

Nesta aula, estamos focados puramente em PHP e PDO para interagir com o banco de dados. Não há múltiplas tecnologias para integrar no sentido de "Express + Better-Auth". A integração se dá entre o PHP (com PDO) e o MySQL/MariaDB.


5. Exercícios/Desafios Práticos 🧑‍💻

Agora é sua vez de colocar a mão na massa! Crie os arquivos PHP necessários e execute-os.

Configuração Inicial:

  1. Certifique-se de ter um servidor web (Apache/Nginx) com PHP e MySQL/MariaDB configurados.
  2. Crie um banco de dados (ex: meu_banco_de_dados).
  3. Execute a query CREATE TABLE usuarios (...) para criar a tabela usuarios.
  4. Insira alguns dados de teste na tabela usuarios para poder atualizá-los e excluí-los. Você pode usar o insert_usuario.php da aula anterior ou inserir manualmente:
    INSERT INTO usuarios (nome, email, senha) VALUES ('Alice', 'alice@example.com', 'senha123');
    INSERT INTO usuarios (nome, email, senha) VALUES ('Bob', 'bob@example.com', 'senha456');
    INSERT INTO usuarios (nome, email, senha) VALUES ('Charlie', 'charlie@example.com', 'senha789');
  5. Crie o arquivo db_connection.php e ajuste as credenciais do seu banco de dados.

Tarefas:

  • Tarefa 1: Atualizar Nome de Usuário

    • Crie um arquivo atualizar_nome.php.
    • Implemente uma lógica para atualizar o nome de um usuário, dado seu id.
    • Teste com um ID existente e um ID que não existe.
    • Exiba mensagens de sucesso ou erro.
  • Tarefa 2: Excluir Usuário por Email

    • Crie um arquivo excluir_por_email.php.
    • Implemente uma lógica para excluir um usuário, dado seu email.
    • Teste com um e-mail existente e um e-mail que não existe.
    • Exiba mensagens de sucesso ou erro.
  • Tarefa 3: Atualização Condicional

    • Crie um arquivo promover_usuario.php.
    • Imagine que você tem uma coluna status (VARCHAR) na tabela usuarios com valores como 'ativo', 'inativo', 'admin'. Adicione essa coluna à sua tabela se ainda não tiver:
      ALTER TABLE usuarios ADD COLUMN status VARCHAR(50) DEFAULT 'ativo';
    • Implemente uma lógica para atualizar o status de um usuário para 'admin' se o email dele for 'alice@example.com' (ou qualquer outro e-mail que você tenha inserido).
    • Verifique se a atualização ocorreu.
  • Tarefa 4: Verificação de Existência antes de Deletar

    • Crie um arquivo deletar_seguro.php.
    • Antes de tentar deletar um usuário por ID, primeiro faça um SELECT para verificar se o usuário realmente existe.
    • Se existir, proceda com o DELETE. Se não existir, exiba uma mensagem informativa. Isso é uma boa prática para evitar mensagens de "0 linhas afetadas" quando o ID não existe, e ter um controle mais explícito.

6. Resumo e Próximos Passos 🏁

Parabéns! Você dominou as operações UPDATE e DELETE com PDO, completando assim o ciclo CRUD básico. Agora você tem as ferramentas para criar, ler, atualizar e excluir dados de forma segura e eficiente em suas aplicações PHP.

O que aprendemos:

  • A importância da cláusula WHERE para UPDATE e DELETE.
  • Como usar PDO::prepare(), PDOStatement::bindParam() e PDOStatement::execute() para operações seguras.
  • A utilidade de PDOStatement::rowCount() para verificar o sucesso das operações.
  • A importância do tratamento de erros com try...catch e PDOException.

Próximos Passos:

No projeto final do módulo, você aplicará todo o conhecimento adquirido sobre CRUD para construir uma aplicação mais completa. Prepare-se para integrar essas operações em um contexto real, possivelmente com interfaces de usuário e validação de dados mais robusta!

Até a próxima aula! 👋

© 2025 Escola All Dev. Todos os direitos reservados.

Operações CRUD II: UPDATE e DELETE com PDO - Fundamentos do PHP | escola.all.dev.br