Cara Membuat Pagination di PHP: Panduan Lengkap untuk Developer Web

Sebagai developer web, Anda pasti sering berhadapan dengan data dalam jumlah besar. Menampilkan ribuan data sekaligus dalam satu halaman web bukan hanya tidak efisien, tetapi juga merusak pengalaman pengguna. Di sinilah pagination atau penomoran halaman memainkan peran krusial. Pagination memungkinkan Anda memecah kumpulan data besar menjadi bagian-bagian yang lebih kecil dan mudah dicerna, meningkatkan performa website, serta membuat navigasi konten lebih intuitif.

Pada panduan ini, kita akan membahas langkah demi langkah cara membuat pagination di PHP secara manual, lengkap dengan contoh penggunaan database MySQL. Artikel ini dirancang agar mudah diikuti oleh pemula sekalipun, namun tetap memberikan praktik terbaik yang sering digunakan oleh developer berpengalaman.

Mengapa Pagination Penting untuk Aplikasi Web Anda?

Sebelum masuk ke implementasi teknis, mari kita pahami mengapa pagination menjadi elemen yang tak terpisahkan dalam pengembangan aplikasi web modern:

  • Peningkatan Performa: Mengambil dan menampilkan sejumlah besar data dari database sekaligus akan memakan banyak memori server dan waktu eksekusi. Pagination membatasi jumlah data yang diambil per permintaan, mengurangi beban server dan mempercepat waktu muat halaman.
  • User Experience (UX) yang Lebih Baik: Pengguna tidak perlu scroll terlalu jauh untuk menemukan informasi yang dicari. Tautan halaman yang jelas memudahkan pengguna untuk melompat antar halaman atau melihat data selanjutnya/sebelumnya.
  • Optimasi SEO: Meskipun ada perdebatan tentang dampak langsungnya, Google tetap merekomendasikan pagination yang terstruktur dengan baik. Konten yang terpaginasi dengan baik juga membantu bot pencari mengindeks semua konten Anda secara efisien.
  • Manajemen Data Lebih Mudah: Baik untuk admin maupun pengguna, melihat data dalam potongan-potongan kecil jauh lebih mudah untuk dianalisis dan dikelola.

Prasyarat

Untuk mengikuti tutorial ini, Anda memerlukan:

  • Pemahaman dasar PHP dan MySQL.
  • Web server (Apache/Nginx) dengan PHP terinstal.
  • Database MySQL (atau MariaDB).
  • Text editor pilihan Anda.

Langkah 1: Setup Database dan Data Contoh

Pertama, kita akan membuat database sederhana dan beberapa data dummy yang akan kita gunakan untuk demonstrasi pagination. Anggap saja kita memiliki tabel articles yang berisi daftar artikel.

Buat database baru, misalnya tutorial_pagination. Kemudian, jalankan query SQL berikut untuk membuat tabel dan mengisi data:


CREATE TABLE articles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    content TEXT
);

INSERT INTO articles (title, content) VALUES
('Artikel Pertama', 'Isi dari artikel pertama di blog kami.'),
('Judul Artikel Kedua', 'Ini adalah konten untuk artikel yang kedua.'),
('Panduan Ketiga: Belajar PHP', 'Detail langkah-langkah belajar PHP dari dasar.'),
('Review Aplikasi XYZ', 'Pengalaman menggunakan aplikasi XYZ dan fitur-fiturnya.'),
('Tips Produktivitas Developer', 'Beberapa tips untuk meningkatkan produktivitas saat ngoding.'),
('Tutorial Membuat REST API dengan PHP', 'Langkah-langkah membangun REST API sederhana.'),
('Memahami Konsep OOP di PHP', 'Penjelasan Object-Oriented Programming dalam PHP.'),
('Perbandingan Framework PHP', 'Melihat kelebihan dan kekurangan Laravel, CodeIgniter, dan Symfony.'),
('Memaksimalkan Penggunaan Composer', 'Cara efektif mengelola dependensi PHP dengan Composer.'),
('Keamanan Web: Mencegah SQL Injection', 'Pentingnya validasi input untuk mencegah serangan SQL Injection.'),
('Panduan Deploy Aplikasi PHP ke VPS', 'Langkah-langkah untuk membawa aplikasi Anda online.'),
('Pengenalan Docker untuk Developer PHP', 'Mulai menggunakan Docker dalam alur kerja PHP Anda.'),
('Integrasi Pembayaran Online di PHP', 'Cara mengintegrasikan payment gateway populer.'),
('Optimasi Query MySQL untuk Performa', 'Tips untuk membuat query database lebih cepat.'),
('Belajar Git dan GitHub untuk Kolaborasi', 'Menguasai version control untuk kerja tim.'),
('Membuat Sistem Login Sederhana dengan PHP', 'Dasar-dasar otentikasi pengguna.'),
('Panduan Menggunakan AJAX dengan PHP', 'Mengambil data tanpa refresh halaman.'),
('Memahami Sesi dan Cookie di PHP', 'Bagaimana PHP mengelola status pengguna.'),
('Debugging Aplikasi PHP dengan Xdebug', 'Alat esensial untuk menemukan dan memperbaiki bug.'),
('Menggunakan Environment Variables di PHP', 'Mengelola konfigurasi aplikasi dengan aman.'),
('Membangun Fitur Pencarian Real-time', 'Implementasi fitur pencarian instan.'),
('Tutorial Upload File di PHP', 'Cara aman mengelola file yang diunggah pengguna.'),
('Integrasi API Pihak Ketiga dengan PHP', 'Menghubungkan aplikasi Anda dengan layanan eksternal.'),
('Membuat Cron Job untuk Tugas Otomatis', 'Menjadwalkan skrip PHP untuk berjalan secara berkala.'),
('Pengelolaan Error dan Exception di PHP', 'Strategi penanganan kesalahan yang efektif.'),
('Menggunakan Queue System di PHP', 'Menangani tugas background secara asinkron.'),
('Membangun Aplikasi Chat Real-time dengan PHP', 'Memanfaatkan teknologi WebSocket.'),
('Memahami Microservices di PHP', 'Konsep dan implementasi arsitektur microservices.'),
('Panduan Cache di PHP untuk Performa', 'Strategi caching untuk mempercepat aplikasi.'),
('Belajar Testing di PHP dengan PHPUnit', 'Menerapkan Unit Test untuk kode yang robust.');

Kita punya 30 artikel di sini. Ini akan cukup untuk melihat bagaimana pagination bekerja.

Langkah 2: Menghubungkan PHP ke Database

Buat file config.php untuk menyimpan detail koneksi database Anda. Ini adalah praktik yang baik agar kredensial database tidak tersebar di seluruh kode Anda.


<?php
$host = 'localhost'; // Atau IP address database Anda
$db   = 'tutorial_pagination';
$user = 'root';      // Username database Anda
$pass = '';          // Password database Anda
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];

try {
    $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
    throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
?>

Catatan: Saya menggunakan PDO (PHP Data Objects) di sini karena ini adalah cara yang direkomendasikan dan lebih aman untuk berinteraksi dengan database di PHP. PDO mendukung prepared statements yang membantu mencegah serangan SQL Injection. Jika Anda lebih familiar dengan mysqli, prinsip dasarnya sama, hanya sintaksnya yang sedikit berbeda.

Langkah 3: Logika Dasar Pagination

Sekarang, mari kita buat file index.php yang akan berisi logika utama pagination kita. Di sinilah kita akan menghitung total data, menentukan halaman saat ini, dan menghitung offset untuk query database.


<?php
require 'config.php'; // Hubungkan ke database

// 1. Konfigurasi Pagination
$items_per_page = 5; // Jumlah artikel per halaman

// 2. Mendapatkan Halaman Saat Ini dari URL
// Default ke halaman 1 jika tidak ada parameter 'page' di URL
$current_page = isset($_GET['page']) ? (int)$_GET['page'] : 1;

// Pastikan halaman tidak kurang dari 1
$current_page = max(1, $current_page);

// 3. Menghitung OFFSET untuk Query Database
// Offset adalah posisi awal data yang akan diambil
// Contoh: halaman 1 (offset 0), halaman 2 (offset 5), halaman 3 (offset 10), dst.
$offset = ($current_page - 1) * $items_per_page;

// 4. Mendapatkan Total Data
// Kita perlu tahu berapa banyak total artikel untuk menghitung total halaman
$stmt_total = $pdo->query("SELECT COUNT(*) FROM articles");
$total_items = $stmt_total->fetchColumn();

// 5. Menghitung Total Halaman
$total_pages = ceil($total_items / $items_per_page);

// Pastikan halaman saat ini tidak melebihi total halaman
// Ini penting jika pengguna mencoba mengakses halaman yang tidak ada
if ($current_page > $total_pages && $total_pages > 0) {
    $current_page = $total_pages;
    $offset = ($current_page - 1) * $items_per_page; // Perbarui offset
} elseif ($total_pages == 0) {
    // Jika tidak ada data sama sekali, set total halaman ke 1 untuk menghindari error
    $total_pages = 1;
    $current_page = 1;
    $offset = 0;
}


// 6. Mengambil Data untuk Halaman Saat Ini
// Gunakan LIMIT dan OFFSET dalam query SQL Anda
$stmt = $pdo->prepare("SELECT * FROM articles ORDER BY id DESC LIMIT :limit OFFSET :offset");
$stmt->bindParam(':limit', $items_per_page, PDO::PARAM_INT);
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$articles = $stmt->fetchAll();

// --- Tampilan HTML akan di sini ---
?>

Mari kita breakdown setiap bagian penting dari logika di atas:

  • $items_per_page: Variabel ini menentukan berapa banyak item (artikel) yang ingin Anda tampilkan per halaman. Ini bisa Anda atur sesuai kebutuhan.
  • $current_page: Variabel ini mendapatkan nomor halaman saat ini dari parameter URL (misalnya, index.php?page=2). Jika parameter page tidak ada, defaultnya adalah halaman 1. Kita menggunakan (int) untuk memastikan nilai yang diterima adalah integer dan aman.
  • $offset: Ini adalah variabel kunci untuk pagination. Offset memberitahu database dari posisi mana data harus mulai diambil. Misalnya, jika Anda ingin menampilkan 5 item per halaman:
    • Halaman 1: offset 0 (ambil dari item ke-0)
    • Halaman 2: offset 5 (ambil dari item ke-5)
    • Halaman 3: offset 10 (ambil dari item ke-10)

    Rumusnya adalah (current_page - 1) * items_per_page.

  • $total_items: Kita menghitung total baris di tabel articles. Ini penting untuk mengetahui berapa banyak halaman yang perlu kita buat.
  • $total_pages: Ini adalah total jumlah halaman yang akan kita miliki. Dihitung dengan membagi total item dengan item per halaman, kemudian dibulatkan ke atas menggunakan ceil() untuk memastikan semua item memiliki tempatnya sendiri, meskipun halaman terakhir tidak penuh.
  • Validasi $current_page > $total_pages: Penting untuk mencegah pengguna mengakses halaman yang tidak ada. Jika current_page lebih besar dari total_pages, kita paksa kembali ke halaman terakhir.
  • Mengambil Data: Kita menggunakan SELECT * FROM articles ORDER BY id DESC LIMIT :limit OFFSET :offset.
    • LIMIT: Menentukan berapa banyak baris yang akan dikembalikan.
    • OFFSET: Menentukan baris mana yang akan dimulai.

    Penggunaan prepared statements dengan bindParam untuk LIMIT dan OFFSET juga sangat disarankan untuk keamanan.

Langkah 4: Menampilkan Data dengan Pagination

Setelah data diambil, sekarang saatnya menampilkannya di halaman HTML. Lanjutkan di file index.php Anda:


<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tutorial Pagination di PHP</title>
    <style>
        body { font-family: sans-serif; margin: 20px; }
        .article { border: 1px solid #eee; padding: 15px; margin-bottom: 15px; border-radius: 5px; }
        .article h3 { margin-top: 0; color: #333; }
        .pagination { display: flex; justify-content: center; list-style: none; padding: 0; }
        .pagination li { margin: 0 5px; }
        .pagination li a, .pagination li span {
            display: block;
            padding: 8px 12px;
            text-decoration: none;
            color: #007bff;
            border: 1px solid #ddd;
            border-radius: 4px;
        }
        .pagination li span.active {
            background-color: #007bff;
            color: white;
            border-color: #007bff;
        }
        .pagination li a:hover:not(.active) {
            background-color: #f0f0f0;
        }
        .pagination li.disabled a {
            color: #ccc;
            pointer-events: none;
            cursor: default;
        }
    </style>
</head>
<body>
    <h1>Daftar Artikel</h1>

    <div class="articles-container">
        <?php if (count($articles) > 0): ?>
            <?php foreach ($articles as $article): ?>
                <div class="article">
                    <h3><?php echo htmlspecialchars($article['title']); ?></h3>
                    <p><?php echo htmlspecialchars(substr($article['content'], 0, 150)); ?>...</p>
                </div>
            <?php endforeach; ?>
        <?php else: ?>
            <p>Tidak ada artikel ditemukan.</p>
        <?php endif; ?>
    </div>

    <!-- Pagination Links akan ditempatkan di sini -->
    <?php if ($total_pages > 1): ?>
        <ul class="pagination">
            <!-- Tombol 'Previous' -->
            <li class="<?php echo ($current_page <= 1) ? 'disabled' : ''; ?>">
                <a href="?page=<?php echo max(1, $current_page - 1); ?>">Previous</a>
            </li>

            <!-- Tautan Halaman -->
            <?php
            // Logika untuk menampilkan beberapa halaman di sekitar halaman saat ini
            $start_page_display = max(1, $current_page - 2);
            $end_page_display = min($total_pages, $current_page + 2);

            // Jika halaman awal display terlalu jauh dari 1, tambahkan '...'
            if ($start_page_display > 1) {
                echo '<li><a href="?page=1">1</a></li>';
                if ($start_page_display > 2) {
                    echo '<li><span>...</span></li>';
                }
            }

            for ($i = $start_page_display; $i <= $end_page_display; $i++):
            ?>
                <li>
                    <a href="?page=<?php echo $i; ?>" class="<?php echo ($i == $current_page) ? 'active' : ''; ?>">
                        <?php echo $i; ?>
                    </a>
                </li>
            <?php endfor; ?>

            <?php
            // Jika halaman akhir display terlalu jauh dari total_pages, tambahkan '...'
            if ($end_page_display < $total_pages) {
                if ($end_page_display < $total_pages - 1) {
                    echo '<li><span>...</span></li>';
                }
                echo '<li><a href="?page=<?php echo $total_pages; ?>"><?php echo $total_pages; ?></a></li>';
            }
            ?>

            <!-- Tombol 'Next' -->
            <li class="<?php echo ($current_page >= $total_pages) ? 'disabled' : ''; ?>">
                <a href="?page=<?php echo min($total_pages, $current_page + 1); ?>">Next</a>
            </li>
        </ul>
    <?php endif; ?>

</body>
</html>

Langkah 5: Membuat Link Navigasi Pagination

Bagian terpenting dari pagination adalah link navigasinya. Kita akan membuat tombol “Previous”, “Next”, dan tautan untuk nomor halaman. Kode di atas sudah mencakup ini, mari kita bahas secara terpisah untuk pemahaman lebih lanjut.

Tombol ‘Previous’ dan ‘Next’:


<li class="<?php echo ($current_page <= 1) ? 'disabled' : ''; ?>">
    <a href="?page=<?php echo max(1, $current_page - 1); ?>">Previous</a>
</li>
...
<li class="<?php echo ($current_page >= $total_pages) ? 'disabled' : ''; ?>">
    <a href="?page=<?php echo min($total_pages, $current_page + 1); ?>">Next</a>
</li>
  • Kita menambahkan class disabled jika tombol “Previous” ada di halaman pertama (current_page <= 1) atau tombol “Next” ada di halaman terakhir (current_page >= total_pages). Ini memberikan indikasi visual bahwa tombol tidak dapat diklik.
  • max(1, $current_page - 1) memastikan bahwa kita tidak pergi ke halaman 0 atau negatif.
  • min($total_pages, $current_page + 1) memastikan kita tidak pergi ke halaman di atas total halaman yang tersedia.

Tautan Nomor Halaman (dengan rentang):

Untuk menghindari terlalu banyak tautan halaman jika ada ratusan halaman, kita akan menampilkan rentang halaman tertentu di sekitar halaman saat ini (misalnya, 2 halaman sebelum dan 2 halaman sesudah).


<?php
// Logika untuk menampilkan beberapa halaman di sekitar halaman saat ini
$start_page_display = max(1, $current_page - 2);
$end_page_display = min($total_pages, $current_page + 2);

// Jika halaman awal display terlalu jauh dari 1, tambahkan '1' dan '...'
if ($start_page_display > 1) {
    echo '<li><a href="?page=1">1</a></li>';
    if ($start_page_display > 2) {
        echo '<li><span>...</span></li>';
    }
}

for ($i = $start_page_display; $i <= $end_page_display; $i++):
?>
    <li>
        <a href="?page=<?php echo $i; ?>" class="<?php echo ($i == $current_page) ? 'active' : ''; ?>">
            <?php echo $i; ?>
        </a>
    </li>
<?php endfor; ?>

<?php
// Jika halaman akhir display terlalu jauh dari total_pages, tambahkan '...' dan 'total_pages'
if ($end_page_display < $total_pages) {
    if ($end_page_display < $total_pages - 1) {
        echo '<li><span>...</span></li>';
    }
    echo '<li><a href="?page=<?php echo $total_pages; ?>"><?php echo $total_pages; ?></a></li>';
}
?>
  • $start_page_display dan $end_page_display menentukan rentang halaman yang akan ditampilkan di navigasi.
  • Kita juga menambahkan “…” dan link ke halaman pertama atau terakhir jika rentang yang ditampilkan tidak mencakup keduanya. Ini meningkatkan user experience, terutama untuk website dengan banyak halaman.
  • Class active ditambahkan ke tautan halaman saat ini untuk memberikan indikasi visual yang jelas kepada pengguna.

Masalah yang Sering Terjadi

Dalam praktiknya, saat mengimplementasikan pagination, developer sering menemui beberapa masalah. Berikut adalah beberapa yang paling umum dan cara mengatasinya:

1. SQL Injection

Gejala: Data yang ditampilkan tidak sesuai, atau bahkan database bisa disalahgunakan jika input pengguna tidak divalidasi dengan benar.
Penyebab: Menggunakan nilai $_GET['page'] secara langsung dalam query SQL tanpa sanitasi atau prepared statements.
Solusi: Selalu gunakan prepared statements (seperti yang dilakukan dalam contoh PDO di atas) atau pastikan untuk membersihkan input pengguna secara ketat, terutama untuk nilai numerik seperti nomor halaman, dengan (int) atau filter_var(). Contoh: $current_page = (int)$_GET['page']; sudah cukup baik untuk angka.

2. Halaman Kosong atau Error “Division by Zero”

Gejala: Pengguna mengklik tautan pagination dan halaman yang ditampilkan kosong atau muncul error fatal.
Penyebab:

  • Akses halaman yang tidak ada (misalnya, halaman 100 padahal hanya ada 10 halaman).
  • Database tidak memiliki data sama sekali, menyebabkan $total_items menjadi 0 dan pembagian $total_items / $items_per_page menghasilkan error jika tidak ditangani.

Solusi:

  • Validasi $current_page agar tidak melebihi $total_pages: if ($current_page > $total_pages && $total_pages > 0) { $current_page = $total_pages; ... }.
  • Tangani kasus di mana tidak ada data sama sekali dengan mengatur $total_pages menjadi 1 dan $current_page menjadi 1 jika $total_items adalah 0. Ini memastikan logika pagination tidak error dan menampilkan pesan “Tidak ada artikel ditemukan”.

3. Pagination Tidak Konsisten dengan Filter Lain

Gejala: Pengguna memfilter data (misalnya, berdasarkan kategori), tetapi saat berpindah halaman, filter tersebut hilang atau pagination tidak bekerja dengan benar.
Penyebab: Tautan pagination hanya menyertakan parameter page dan mengabaikan parameter filter lainnya di URL.
Solusi: Pastikan tautan pagination mempertahankan semua parameter URL yang ada. Anda bisa melakukan ini dengan mengambil semua parameter $_GET (kecuali page) dan menambahkannya kembali ke URL setiap tautan pagination.
Contoh:


$query_params = $_GET;
unset($query_params['page']); // Hapus parameter 'page'

$base_url = http_build_query($query_params); // Buat query string dari parameter lainnya
$link_prefix = empty($base_url) ? '?' : '?' . $base_url . '&';

// Maka link pagination Anda akan seperti:
// <a href="<?php echo $link_prefix; ?>page=<?php echo $i; ?>">

Ini akan menghasilkan URL seperti ?category=tech&page=2.

Pengalaman dan Pertimbangan Praktis

Meskipun implementasi pagination dasar di atas berfungsi, ada beberapa pertimbangan yang sering muncul di dunia nyata dan bisa meningkatkan kualitas aplikasi Anda:

1. Performa pada Dataset Sangat Besar

Untuk tabel dengan jutaan atau miliaran baris, query COUNT(*) bisa menjadi lambat. Dalam skenario ini, Anda bisa mempertimbangkan untuk meng-cache total jumlah item atau menggunakan teknik pagination “berbasis cursor” (misalnya, “Load More” atau “Next Page only”) yang hanya bergantung pada ID terakhir yang dilihat, bukan total offset.

Pada workflow yang melibatkan data besar, melakukan SELECT COUNT(*) setiap kali halaman dimuat adalah bottleneck yang harus dihindari. Saya pribadi sering menggunakan teknik approximate count atau caching untuk mengurangi beban database.

2. Memisahkan Logika dari Tampilan (MVC)

Kode di atas menggabungkan logika PHP dengan HTML. Dalam project skala kecil ini mungkin tidak terasa, tetapi di project yang lebih besar, ini akan sulit dikelola. Pisahkan logika pagination ke dalam fungsi atau class terpisah, dan biarkan file tampilan (view) hanya berurusan dengan menampilkan data.

Banyak developer modern menggunakan framework PHP (seperti Laravel, Symfony, CodeIgniter) yang sudah menyediakan fitur pagination out-of-the-box dengan cara yang lebih rapi dan aman. Saya sangat merekomendasikan untuk belajar framework ini begitu Anda memahami dasar-dasarnya.

3. User Experience yang Lebih Canggih

  • “First” dan “Last” Links: Tambahkan tautan untuk langsung menuju halaman pertama dan terakhir.
  • Input Halaman Langsung: Sediakan input field di mana pengguna bisa mengetikkan nomor halaman yang ingin mereka tuju.
  • Dropdown “Items per Page”: Beri opsi kepada pengguna untuk memilih berapa banyak item yang ingin mereka lihat per halaman.
  • Infinite Scrolling: Sebagai alternatif pagination tradisional, infinite scrolling memuat lebih banyak konten saat pengguna menggulir ke bawah, sering digunakan di platform media sosial.

4. Keamanan dan Validasi

Selain SQL Injection, pastikan Anda memvalidasi semua input pengguna dari $_GET atau $_POST. Misalnya, $_GET['page'] harus selalu berupa angka positif. Jika input bukan angka atau angka negatif, Anda harus menanganinya (misalnya, mengarahkannya kembali ke halaman 1 atau menampilkan error).

FAQ

Apa itu pagination?

Pagination adalah proses membagi kumpulan data besar (seperti hasil pencarian, daftar artikel, atau produk) menjadi serangkaian halaman yang lebih kecil, sehingga lebih mudah dikelola dan dinavigasi oleh pengguna.

Mengapa saya harus menggunakan pagination?

Pagination meningkatkan performa website dengan mengurangi jumlah data yang diambil dan ditampilkan per permintaan, memperbaiki user experience dengan membuat navigasi konten lebih mudah, dan dapat membantu optimasi SEO.

Apa perbedaan antara LIMIT dan OFFSET di SQL?

LIMIT menentukan jumlah maksimum baris yang akan dikembalikan oleh query. OFFSET menentukan baris awal dari hasil yang akan diambil (misalnya, OFFSET 10 berarti mulai mengambil dari baris ke-11).

Apakah PDO lebih baik daripada mysqli untuk pagination?

Ya, PDO umumnya dianggap lebih baik karena menyediakan antarmuka yang konsisten untuk berbagai jenis database dan secara inheren mendukung prepared statements, yang merupakan mekanisme keamanan vital untuk mencegah SQL Injection. mysqli juga mendukung prepared statements, tetapi PDO lebih fleksibel.

Bagaimana cara membuat tautan pagination agar konsisten dengan filter lain di URL?

Anda perlu mengambil semua parameter GET yang ada (kecuali parameter page itu sendiri), kemudian menambahkannya kembali ke setiap tautan pagination. Fungsi http_build_query() sangat membantu untuk tujuan ini, seperti yang ditunjukkan di bagian “Masalah yang Sering Terjadi”.

Kesimpulan

Pagination adalah fitur fundamental dalam pengembangan web yang menangani tampilan data dalam jumlah besar. Dengan memahami logika di balik LIMIT dan OFFSET di SQL, serta bagaimana mengelola parameter URL di PHP, Anda dapat membangun sistem pagination yang robust dan efisien.

Meskipun panduan ini fokus pada implementasi manual, pengalaman saya menunjukkan bahwa menguasai dasarnya adalah kunci sebelum beralih ke solusi yang lebih canggih atau framework. Dengan implementasi yang tepat, pagination tidak hanya akan membuat aplikasi Anda lebih cepat, tetapi juga jauh lebih ramah pengguna. Teruslah bereksperimen dan adaptasi sesuai kebutuhan project Anda!

TAGS: PHP, Pagination, MySQL, Web Development, Tutorial, Coding, Database, Frontend, Backend, Developer Tools


Baca Juga

You May Also Like

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *