انتقل إلى محتوى الدرس

Pagination with LIMIT and OFFSET تقسيم الصفحات عبر LIMIT و OFFSET

ابنِ فلاتر بحث ديناميكية بـ LIKE وIN، وأمّن الترتيب بـ ORDER BY، ونفّذ تقسيم الصفحات Pagination عبر LIMIT وOFFSET في PDO.
1 صفوف تعليمية
PHP
0 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

قسّم نتائج الجداول الكبيرة إلى صفحات باستخدام LIMIT :limit OFFSET :offset مع ربط القيمتين كأعداد صحيحة عبر PDO::PARAM_INT.

  • احسب إزاحة البداية من رقم الصفحة الحالي بالمعادلة: $offset = ($page - 1) * $perPage مع ضمان أن الصفحة لا تقل عن 1.
  • اربط المعاملين :limit و:offset عبر $stmt->bindValue(":limit", $perPage, PDO::PARAM_INT) حتى لا يحيطهما PDO بعلامات تنصيص.
  • اربط دائماً تقسيم الصفحات بترتيب حاسم مثل ORDER BY id DESC لضمان عدم تداخل أو تكرار السجلات عند الانتقال بين الصفحات.

في الصفحة الثانية بعنصرين لكل صفحة، تكون الإزاحة (2 - 1) * 2 = 2، فيتخطى الاستعلام أول سجلين ويُرجع P3, P4.

PHP
<?php
$pdo = new PDO('sqlite::memory:');
$pdo->exec('CREATE TABLE posts (id INT PRIMARY KEY, title TEXT)');
$pdo->exec("INSERT INTO posts VALUES (1,'P1'),(2,'P2'),(3,'P3'),(4,'P4'),(5,'P5')");
$page = 2;
$perPage = 2;
$offset = ($page - 1) * $perPage;
$stmt = $pdo->prepare('SELECT title FROM posts ORDER BY id ASC LIMIT :lim OFFSET :off');
$stmt->bindValue(':lim', $perPage, PDO::PARAM_INT);
$stmt->bindValue(':off', $offset, PDO::PARAM_INT);
$stmt->execute();
echo "Page 2: " . implode(', ', $stmt->fetchAll(PDO::FETCH_COLUMN)) . "\n";