Como criar um CRUD simples com PHP

Assumo que você está usando MySQL como banco de dados, e utiliza a extensão PDO para se conectar ao banco de dados.
Este é um exemplo básico de uma classe PHP que realiza as operações CRUD (Create, Read, Update, Delete) em uma tabela de "grupos de produtos", com os campos ID, NAME, CREATED_AT, UPDATED_AT, e ACTIVE, imaginei um cenário simples para mostrar como pode ser feito, óbvio que existem outras dezenas de formas melhores de fazer isso, porém essa aqui já serve para aprender um pouco.
A vantagem de trabalhar com classes é poder reaprovitar o código de maneira eficiente, ao invés de fazer inserções com "include" ou "require", vamos lá então.
Estrutura da tabela
CREATE TABLE product_groups (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
active TINYINT(1) DEFAULT 1
);
Essa é uma tabela bem simples, fique à vontade para incluir seu campos, ou mesmo trabalhar com outro exemplo, aqui deixo em observação que no futuro vou mostrar outros exemplos onde no campo "active" vou usar ENUM('Y','N'), pois gosto mais do resultado, porém para esse primeiro modelo vamos utilizar numérico mesmo.
Classe PHP para o CRUD
class ProductGroup {
private $pdo;
// Construtor para estabelecer conexão com o banco de dados
public function __construct($host, $dbname, $username, $password) {
$dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4";
try {
$this->pdo = new PDO($dsn, $username, $password);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
}
// CREATE - Adiciona um novo grupo de produto
public function create($name, $active = 1) {
$sql = "INSERT INTO product_groups (name, active) VALUES (:name, :active)";
$stmt = $this->pdo->prepare($sql);
$stmt->bindParam(':name', $name);
$stmt->bindParam(':active', $active);
return $stmt->execute();
}
// READ - Lê todos os grupos de produtos
public function readAll() {
$sql = "SELECT * FROM product_groups";
$stmt = $this->pdo->query($sql);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
// READ - Lê um grupo de produto por ID
public function read($id) {
$sql = "SELECT * FROM product_groups WHERE id = :id";
$stmt = $this->pdo->prepare($sql);
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->execute();
return $stmt->fetch(PDO::FETCH_ASSOC);
}
// UPDATE - Atualiza um grupo de produto
public function update($id, $name, $active) {
$sql = "UPDATE product_groups SET name = :name, active = :active, updated_at = NOW() WHERE id = :id";
$stmt = $this->pdo->prepare($sql);
$stmt->bindParam(':name', $name);
$stmt->bindParam(':active', $active, PDO::PARAM_INT);
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
return $stmt->execute();
}
// DELETE - Exclui um grupo de produto
public function delete($id) {
$sql = "DELETE FROM product_groups WHERE id = :id";
$stmt = $this->pdo->prepare($sql);
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
return $stmt->execute();
}
}
Como utilizar a classe
Conectar ao banco de dados
$productGroup = new ProductGroup('localhost', 'nome_do_banco', 'usuario', 'senha');
Criar um novo grupo de produtos
$productGroup->create('Eletrônicos', 1);
Listar todos os grupos de produtos
$grupos = $productGroup->readAll();
print_r($grupos);
Ler um grupo de produtos específico por ID
$grupo = $productGroup->read(1);
print_r($grupo);
Atualizar um grupo de produtos
$productGroup->update(1, 'Eletrodomésticos', 1);
Deletar um grupo de produtos
$productGroup->delete(1);
Essa classe é um exemplo básico e pode ser expandida para incluir tratamentos de erros mais robustos e medidas de segurança, como sanitização de entradas e proteção contra SQL Injection (que já é em parte tratada pelo PDO::prepare). Também é possível extrair a parte de conexão com a base de dados e colocar em uma classe de conexão, assim podendo ser reaproveitada em outras classes de CRUD para outras tabelas, na verdade até mesmo o CRUD pode ser separado e generalizado, as possibilidades são muitas, mas espero que este exemplo possa começar te dando uma base.