Paginação em PHP com PDO e LIMIT/OFFSET
Monte paginação com PHP e PDO usando LIMIT, OFFSET, contagem total e validação dos parâmetros da página.
Calcular LIMIT e OFFSET
$pagina = max(1, (int) ($_GET['pagina'] ?? 1));
$porPagina = 20;
$offset = ($pagina - 1) * $porPagina;
Consulta paginada
$sql = '
SELECT id, nome, email
FROM clientes
ORDER BY nome
LIMIT :limite OFFSET :offset
';
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':limite', $porPagina, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$clientes = $stmt->fetchAll(PDO::FETCH_ASSOC);
Descobrir o total de páginas
$total = (int) $pdo
->query('SELECT COUNT(*) FROM clientes')
->fetchColumn();
$totalPaginas = (int) ceil($total / $porPagina);
Quando OFFSET fica caro
Em tabelas muito grandes e páginas profundas, OFFSET pode exigir que o banco percorra muitas linhas. Nesses casos, considere paginação por cursor, usando a última chave exibida.
Assuntos:paginaçãoPDOLIMIT