Free tutorials & notes in Hindi & English · Clean code examples 🧰 मुफ़्त PDF और फ़ोटो टूल्स →
🔴 Advanced  ·  Lesson 34

Pagination

Pagination क्यों

जब table में सैकड़ों rows हों, उन सबको एक page पर दिखाना धीमा और पढ़ना मुश्किल है। Pagination results को pages में बाँटता है — मान लीजिए 10 प्रति page — उनके बीच जाने को links के साथ। यह pages तेज़ रखता है और users को साफ़ browse करने का तरीका देता है।

💡 Pagination दो SQL keywords से बनता है: LIMIT (कितने) और OFFSET (कितने skip)।

विचार: LIMIT और OFFSET

LIMIT कहता है कितनी rows लौटानी हैं; OFFSET कहता है कितनी पहले skip करनी हैं।

-- page 1: पहली 10 rows
SELECT * FROM products LIMIT 10 OFFSET 0;

-- page 2: 10 skip, अगली 10 लो
SELECT * FROM products LIMIT 10 OFFSET 10;

हर page सिर्फ़ OFFSET बदलता है। page 3, 20 skip करेगा, page 4, 30 skip करेगा, वग़ैरह।

Offset निकालना

Offset page number से एक सरल formula से आता है।

<?php
  $perPage = 10;
  $page = max(1, (int)($_GET["page"] ?? 1));
  $offset = ($page - 1) * $perPage;
  // page 3 -> offset = (3-1)*10 = 20
?>

हम सुरक्षा को page को integer में cast करते हैं और max(1, ...) इस्तेमाल करते हैं ताकि page कभी 1 से नीचे न हो। Formula (page - 1) * perPage skip करने वाली rows देता है।

Paginated query

<?php
  // कुल pages
  $total = $pdo->query("SELECT COUNT(*) FROM products")->fetchColumn();
  $totalPages = ceil($total / $perPage);

  // इस page की rows
  $stmt = $pdo->prepare("SELECT * FROM products LIMIT ? OFFSET ?");
  $stmt->bindValue(1, $perPage, PDO::PARAM_INT);
  $stmt->bindValue(2, $offset, PDO::PARAM_INT);
  $stmt->execute();
  $rows = $stmt->fetchAll();
?>

पहले हम सारी rows गिनते हैं और per-page से भाग देते हैं (ceil से ऊपर round) ताकि कुल pages मिलें। फिर सिर्फ़ इस page की rows LIMIT और OFFSET को integers की तरह bind करके लाते हैं।

<?php
  for ($i = 1; $i <= $totalPages; $i++) {
      echo "<a href='?page=$i'>$i</a> ";
  }
?>
1 2 3 4 5 6 7 8 9 10

एक सरल loop हर page के लिए link print करता है। किसी number पर click URL में ?page=N set करता है, जिसे आपकी offset गणना उस page को दिखाने को पढ़ती है।

आम गलतियाँ

  • Page number cast करना भूलना। (int) इस्तेमाल कीजिए ताकि LIMIT/OFFSET सुरक्षित रहें।
  • Page 0 या negative की अनुमति। page मान्य रखने को max(1, ...) इस्तेमाल कीजिए।
  • कुल pages ऊपर round न करना। ceil() इस्तेमाल कीजिए, वरना आख़िरी कुछ rows को page नहीं मिलता।
  • LIMIT को string की तरह bind करना। PDO::PARAM_INT से bind कीजिए ताकि MySQL स्वीकार करे।

सारांश

  • Pagination results को speed और पढ़ने योग्यता के लिए pages में बाँटता है।
  • LIMIT कितनी rows तय करता है; OFFSET कितनी skip।
  • Offset formula: (page - 1) * perPage।
  • कुल pages: ceil(totalRows / perPage)।
  • ?page=N से numbered page links print करने को loop।

आगे, queries सुरक्षित चलाइए prepared statements से, या results पढ़िए PHP CRUD से।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

PHP में pagination क्या है?
Pagination results की बड़ी list को छोटे pages में बाँटता है — जैसे एक साथ 500 के बजाय हर page पर 10 products दिखाना। यह pages को तेज़ और पढ़ने योग्य रखता है, pages के बीच जाने को links के साथ।
LIMIT और OFFSET कैसे काम करते हैं?
LIMIT तय करता है कितनी rows लौटानी हैं, और OFFSET कितनी पहले skip करनी हैं। page 2 पर 10 प्रति page के लिए, आप LIMIT 10 OFFSET 10 इस्तेमाल करते हैं — पहली 10 skip, फिर अगली 10 लो।
किसी page के लिए offset कैसे निकालूँ?
Formula है offset = (page - 1) * perPage। page 3 पर 10 प्रति page के लिए, यह (3-1)*10 = 20 है, तो आप 20 rows skip करके 21 से 30 तक rows दिखाते हैं।
कुल pages की संख्या कैसे पता करूँ?
SELECT COUNT(*) से सारी rows गिनिए, फिर per-page number से भाग देकर ceil() से ऊपर round कीजिए। 95 rows पर 10 प्रति page के लिए, यह ceil(95/10) = 10 pages है।
क्या LIMIT को सीधे user input के साथ इस्तेमाल करूँ?
पहले page number को integer में cast कीजिए (जैसे (int)$_GET["page"])। चूँकि LIMIT/OFFSET numbers लेते हैं, int में cast करना उन्हें सुरक्षित रखता है। हमेशा जाँचिए page कम-से-कम 1 हो।
← Back to PHP Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.
अगला topicXSS Prevention आपकी प्रगति: 34 / 50 (68%) · Lesson 35 / 50 आगे बढ़ें →

यह lesson कैसा लगा?

आपकी राय से हम content और बेहतर बनाते हैं।

अपना review और सुझाव लिखें (वैकल्पिक)

Review approve होने के बाद आपका नाम और शहर इसके साथ public दिख सकते हैं। Email या phone न लिखें।

▶ CodingEasily on YouTube

Video से सीखें – आसान Hindi में

चुनी हुई video: RDBMS भाग 3 – Class XI Commerce IT

▶ Channel subscribe करें