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:
| Letra | Operação | SQL | Descrição |
|---|---|---|---|
| C | Create | INSERT INTO | Inserir novo registro |
| R | Read | SELECT | Consultar / listar registros |
| U | Update | UPDATE … SET | Atualizar registro existente |
| D | Delete | DELETE FROM | Excluir registro |
Estrutura de arquivos de um módulo CRUD
| Arquivo | Responsabilidade |
|---|---|
inicia.php | Constantes de configuração (host, usuário, senha, banco) |
funcoes.php | Função de conexão PDO + funções utilitárias (validação de CPF, datas…) |
index.php | Tela principal — lista todos os registros (READ), botões Incluir/Alterar/Excluir |
form_inclui.php | Formulário HTML para inserção (campos = colunas da tabela, exceto PK autoincrementada) |
inclui.php | Processa o INSERT, valida campos, redireciona após sucesso |
form_altera.php | Formulário pré-preenchido com dados do registro selecionado |
altera.php | Processa o UPDATE com a chave primária recebida via GET/POST |
exclui.php | Executa 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
WHEREno 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.