شرح صفوف ومحتوى الفقرة
قسّم نتائج الجداول الكبيرة إلى صفحات باستخدام 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";