Início

Responsive Web Development

UA14 — PHP: CRUD com MySQL

CRUD (Create, Read, Update, Delete) é o ciclo completo de persistência de dados. Com PHP e MySQL via PDO, é possível construir sistemas completos de gestão de registros com formulários, listagens e exclusão segura.

O que é CRUD?

CRUD é o conjunto fundamental de operações de persistência de dados em qualquer sistema:

LetraOperaçãoSQLDescrição
CCreateINSERT INTOInserir novo registro
RReadSELECTConsultar / listar registros
UUpdateUPDATE … SETAtualizar registro existente
DDeleteDELETE FROMExcluir registro
Persistência: O Ecossistema CRUD com PDO — Create (form_insct.php), Read (lista.php), Update (form_altera.php), Delete (exclui.php)
Persistência: O Ecossistema CRUD com PDO

Estrutura de arquivos de um módulo CRUD

ArquivoResponsabilidade
inicia.phpConstantes de configuração (host, usuário, senha, banco)
funcoes.phpFunção de conexão PDO + funções utilitárias (validação de CPF, datas…)
index.phpTela principal — lista todos os registros (READ), botões Incluir/Alterar/Excluir
form_inclui.phpFormulário HTML para inserção (campos = colunas da tabela, exceto PK autoincrementada)
inclui.phpProcessa o INSERT, valida campos, redireciona após sucesso
form_altera.phpFormulário pré-preenchido com dados do registro selecionado
altera.phpProcessa o UPDATE com a chave primária recebida via GET/POST
exclui.phpExecuta o DELETE após confirmação do usuário

Conexão com PDO

// funcoes.php — conexão PDO reutilizável
function conecta_bd() {
    try {
        $pdo = new PDO(
            "mysql:host=localhost;dbname=ua14;charset=utf8",
            "root",
            ""
        );
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return $pdo;
    } catch (PDOException $e) {
        die("Erro de conexão: " . $e->getMessage());
    }
}

INSERT — gravar novo registro

// inclui.php — usando prepared statement (evita SQL injection)
require_once "inicia.php";

$titulo = $_POST['titulo'] ?? null;
$autor  = $_POST['autor']  ?? null;

if (empty($titulo) || empty($autor)) {
    die("Preencha todos os campos.");
}

$pdo  = conecta_bd();
$stmt = $pdo->prepare("INSERT INTO livros (titulo, autor) VALUES (:titulo, :autor)");
$ok   = $stmt->execute([':titulo' => $titulo, ':autor' => $autor]);

if ($ok) {
    header("Location: index.php");
} else {
    echo "Erro ao incluir.";
}

SELECT — listar registros

// index.php — buscar e exibir todos os registros
$pdo   = conecta_bd();
$total = $pdo->query("SELECT COUNT(*) FROM livros")->fetchColumn();
$stmt  = $pdo->query("SELECT * FROM livros ORDER BY titulo");

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo $row['titulo'] . " — " . $row['autor'] . "<br>";
}

UPDATE — alterar registro

// altera.php — atualizar campos de um registro específico
$cod   = $_POST['cod_livro'] ?? null;
$titulo = $_POST['titulo']   ?? null;

$pdo  = conecta_bd();
$stmt = $pdo->prepare("UPDATE livros SET titulo = :titulo WHERE cod_livro = :cod");
$ok   = $stmt->execute([':titulo' => $titulo, ':cod' => $cod]);

if ($ok) header("Location: index.php");

DELETE — excluir registro

// exclui.php — sempre use WHERE para não apagar tudo!
$cod = $_GET['cod'] ?? null;

$pdo  = conecta_bd();
$stmt = $pdo->prepare("DELETE FROM livros WHERE cod_livro = :cod");
$stmt->execute([':cod' => $cod]);
header("Location: index.php");

Práticas Modernas — CRUD PHP/MySQL

PDO + Prepared Statements: padrão atual — evita SQL Injection e suporta múltiplos SGBDs. Nunca concatene variáveis direto no SQL. ORM (Object-Relational Mapping): em projetos reais, camadas como Eloquent (Laravel), Doctrine (Symfony) ou Propel mapeiam tabelas a classes PHP, eliminando SQL manual e tornando o código mais expressivo. Migrations: controle de versão do banco de dados via arquivos de migração (Laravel php artisan migrate, Phinx). Mantém o schema consistente entre ambientes (dev/staging/prod). MVC/Repository Pattern: separe a lógica de acesso ao banco (Repository) da lógica de negócio (Service) e da apresentação (Controller/View). Evita misturar HTML com queries SQL no mesmo arquivo. WHERE obrigatório no DELETE/UPDATE: um DELETE sem WHERE apaga todos os registros da tabela — erro grave e irreversível sem backup.

Dicas para a prova — UA14

  • CRUD = Create (INSERT), Read (SELECT), Update (UPDATE), Delete (DELETE).
  • INSERT INTO = operação Create — grava novos registros.
  • DELETE FROM produtos WHERE estoque = 0 = remove produtos com estoque zero.
  • A cláusula WHERE no DELETE é essencial para evitar apagar todos os registros da tabela.
  • UPDATE … SET … WHERE id = 8 = operação Update — modifica campo de registro específico.
  • PDO (PHP Data Objects) = interface para conexão com o banco de dados.
  • Arquivos separados por função (inicia, funcoes, form, inclui, altera, exclui) = melhor organização e manutenção.

Referências bibliográficas desta UA

  • Barreto, J. S. Desenvolvimento de Sistemas com PHP. Porto Alegre: SAGAH, 2018.
  • Silberschatz, A.; Korth, H. F.; Sudarshan, S. Database System Concepts. McGraw-Hill, 2011.