Como fazer paginação de resultados no MySQL com PHP?
Quando trabalhamos com grandes quantidades de registros no banco de dados, exibir todos os resultados de uma só vez pode ser ineficiente. A solução para isso é a paginação, que divide os registros em páginas menores.
Estrutura básica da consulta com LIMIT e OFFSET
A paginação no MySQL pode ser feita utilizando LIMIT
e OFFSET
:
<?php
$conexao = new PDO("mysql:host=localhost;dbname=meu_banco", "usuario", "senha");
$conexao->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$limite = 10; // Registros por página
$pagina = isset($_GET['pagina']) ? (int)$_GET['pagina'] : 1;
$inicio = ($pagina - 1) * $limite;
$sql = "SELECT * FROM usuarios LIMIT :inicio, :limite";
$stmt = $conexao->prepare($sql);
$stmt->bindParam(':inicio', $inicio, PDO::PARAM_INT);
$stmt->bindParam(':limite', $limite, PDO::PARAM_INT);
$stmt->execute();
while ($linha = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "Nome: " . $linha["nome"] . " - Email: " . $linha["email"] . "<br>";
}
?>
Neste código:
- Definimos um número fixo de registros por página (
$limite
). - Calculamos o ponto de início (
$inicio
) com base no número da página. - Utilizamos
LIMIT
eOFFSET
para buscar apenas os registros da página atual.
Criando os links de navegação
Para navegar entre as páginas, precisamos de um sistema de links:
<?php
$sqlTotal = "SELECT COUNT(*) FROM usuarios";
$stmtTotal = $conexao->prepare($sqlTotal);
$stmtTotal->execute();
$totalRegistros = $stmtTotal->fetchColumn();
$totalPaginas = ceil($totalRegistros / $limite);
for ($i = 1; $i <= $totalPaginas; $i++) {
echo "<a href='?pagina=$i'>$i</a> ";
}
?>
Aqui:
- Calculamos o total de registros.
- Determinamos o número total de páginas.
- Criamos links para cada página.
Por que usar paginação no MySQL com PHP?
A paginação é uma técnica essencial para otimizar a exibição de grandes quantidades de dados em uma aplicação PHP. Ao utilizar LIMIT
e OFFSET
, podemos reduzir o impacto no servidor e melhorar a experiência do usuário. Além disso, é importante implementar um sistema de navegação intuitivo para facilitar a navegação entre as páginas.
Algumas aplicações:
- Exibição de listas de usuários em painéis administrativos
- Paginação de postagens em blogs
- Divisão de grandes volumes de dados em relatórios
- Melhoria no desempenho de buscas em lojas virtuais
Dicas para quem está começando
- Use
LIMIT
eOFFSET
para limitar os registros exibidos por página. - Calcule o total de registros para gerar corretamente os links de navegação.
- Evite exibir um número excessivo de páginas de uma vez.
- Utilize parâmetros seguros para evitar SQL Injection.
- Melhore a navegação utilizando CSS para destacar a página atual.
Contribuições de Daniel Moreira