Aprenda a paginar resultados do MySQL no PHP

Veja como criar um sistema de paginação eficiente para exibir registros do MySQL em partes, evitando sobrecarga no servidor.

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 e OFFSET para buscar apenas os registros da página atual.

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.

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 e OFFSET 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

Compartilhe este tutorial: Como fazer paginação de resultados no MySQL com PHP?

Compartilhe este tutorial

Continue aprendendo:

Como exibir dados do banco de dados em uma tabela HTML no PHP?

Veja como buscar registros do MySQL e exibi-los dinamicamente em uma tabela HTML utilizando PHP.

Tutorial anterior

Como exportar dados do MySQL para um arquivo CSV usando PHP?

Veja como gerar um arquivo CSV a partir de dados armazenados no MySQL utilizando PHP.

Próximo tutorial