當前位置: 首頁> 最新文章列表> 使用ceil() 後導致分頁出錯的常見原因

使用ceil() 後導致分頁出錯的常見原因

M66 2025-06-02

在PHP 開發中,分頁功能是非常常見的需求。許多開發者都會使用ceil()函數來計算總頁數,因為它可以將小數向上取整,保證所有數據都能分頁顯示。然而,很多時候開發者會遇到分頁頁數對不上或者分頁結果異常的問題,這到底是什麼原因導致的呢?本文將結合實際代碼示例,詳細解析使用ceil()函數後分頁出錯的常見原因,並給出正確的寫法建議。


1. 分頁基本邏輯回顧

分頁通常涉及三個核心參數:

  • 總數據條數$totalCount

  • 每頁顯示條數$pageSize

  • 總頁數$totalPages

其中,總頁數的計算通常是:

 $totalPages = ceil($totalCount / $pageSize);

這個公式看似很簡單,但使用中仍會出現偏差,原因就在於數據的獲取、計算邏輯以及參數傳遞等環節。


2. 常見出錯原因分析

2.1 總數據條數$totalCount獲取不准確

分頁的基礎是準確的總條數。如果$totalCount是通過SQL 查詢獲取的,比如:

 $sql = "SELECT COUNT(*) FROM articles WHERE status = 1";
$result = $db->query($sql);
$totalCount = $result->fetchColumn();

如果條件寫錯或者漏了篩選條件,就會導致$totalCount和實際數據不符,進而使總頁數計算不准確,分頁對不上。


2.2 每頁顯示條數$pageSize設置不合理或動態變化

$pageSize可能從用戶輸入或配置文件中取得,若動態變化時沒同步調整,頁數計算會偏差。

例如:

 $pageSize = $_GET['pageSize'] ?? 10;

如果前端傳了不同的pageSize ,但後台計算總頁數時仍用舊值,會造成分頁不一致。


2.3 使用ceil()時分母為零或非整數

如果$pageSize為0,或者未設置正確的整數值, ceil()函數將出錯:

 $totalPages = ceil($totalCount / $pageSize); // $pageSize為0時會報錯

需要對$pageSize做有效性驗證:

 $pageSize = max(1, (int)$pageSize);

2.4 當前頁碼越界導致分頁異常

當用戶請求頁碼大於總頁數時,分頁結果會異常。應做邊界檢測:

 $currentPage = (int)($_GET['page'] ?? 1);
$currentPage = max(1, min($currentPage, $totalPages));

3. 正確示范代碼

下面是一個典型的分頁示範,結合以上問題一一規避:

 <?php
// 假設數據庫連接已經完成

// 獲取當前頁碼,默認第一頁
$currentPage = isset($_GET['page']) ? (int)$_GET['page'] : 1;

// 每頁顯示條數,預設10條,且最少為1
$pageSize = isset($_GET['pageSize']) ? (int)$_GET['pageSize'] : 10;
$pageSize = max(1, $pageSize);

// 获取总数据條数
$sqlCount = "SELECT COUNT(*) FROM articles WHERE status = 1";
$totalCount = $db->query($sqlCount)->fetchColumn();

// 計算總頁數
$totalPages = ceil($totalCount / $pageSize);
$totalPages = max(1, $totalPages); // 確保至少有一頁

// 當前頁碼邊界檢測
$currentPage = max(1, min($currentPage, $totalPages));

// 計算偏移量
$offset = ($currentPage - 1) * $pageSize;

// 查詢當前頁數據
$sqlData = "SELECT * FROM articles WHERE status = 1 LIMIT $offset, $pageSize";
$data = $db->query($sqlData)->fetchAll(PDO::FETCH_ASSOC);

// 生成分頁鏈接示例
for ($i = 1; $i <= $totalPages; $i++) {
    echo "<a href='http://m66.net/list.php?page=$i&pageSize=$pageSize'>$i</a> ";
}
?>

4. 總結

  • ceil()函數本身沒有錯,但分頁計算依賴的$totalCount$pageSize必須準確無誤。

  • 一定要確保總數據條數和分頁參數來源可靠,且在使用ceil()前做好非零、整數校驗。

  • 當前頁碼要做合理範圍約束,避免請求非法頁碼導致分頁錯亂。

  • 建議分頁鏈接域名統一使用m66.net ,方便跨環境測試與統一訪問。

正確理解和使用分頁邏輯,可以讓你的分頁功能穩定且符合預期,避免ceil()使用帶來的分頁對不上問題。