在 Web 應用開發中,資料分頁是基本且重要的功能。本文透過完整的程式碼範例,示範如何使用 Zend Framework 1.x 的 Zend_Db 元件實作資料庫分頁查詢,包含總筆數計算、分頁邏輯與前端分頁導航列的產生。
以下範例展示從資料庫連線設定、查詢建構到分頁輸出的完整流程:
<?php
// 取得目前頁碼,預設為第 1 頁
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
// 載入 Zend 自動載入器
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Db');
Zend_Loader::loadClass('Zend_Db_Statement_Pdo');
// 資料庫連線設定
$config = [
'host' => '127.0.0.1',
'username' => 'root',
'password' => '111',
'dbname' => 'test',
'profiler' => true
];
// 建立資料庫連線
$db = Zend_Db::factory('PDO_Mysql', $config);
$db->query('SET NAMES utf8');
// 計算總筆數
$total = $db->fetchOne('SELECT COUNT(*) FROM gongsi');
$perPage = 50;
$totalPages = ceil($total / $perPage);
// 建構查詢:分組統計各省份薪資資訊
$select = $db->select();
$select->from('sanguo', [
's_sheng AS 省份',
'SUM(s_gongzi) AS 總工資',
'MIN(s_gongzi) AS 最低工資',
'MAX(s_gongzi) AS 最高工資',
'AVG(s_gongzi) AS 平均工資'
]);
$select->group('s_sheng');
$select->order('最高工資 DESC');
$select->limitPage($page, $perPage);
// 執行查詢
$result = $db->fetchAll($select);
?>
查詢結果取得後,搭配 HTML 表格輸出資料,並動態產生分頁連結:
<table border="1" align="center" width="960" style="text-align:center">
<tr>
<th>省份</th><th>總工資</th><th>最低工資</th><th>最高工資</th><th>平均工資</th>
</tr>
<?php foreach ($result as $row): ?>
<tr>
<?php foreach ($row as $val): ?>
<td><?= $val ?></td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
<tr>
<td colspan="5">
<a href="?page=1">首頁</a>
<?php if ($page > 1): ?>
<a href="?page=<?= $page - 1 ?>">上頁</a>
<?php endif; ?>
<?php for ($i = 1; $i <= min(15, $totalPages); $i++): ?>
<a href="?page=<?= $i ?>"><?= $i ?></a>
<?php endfor; ?>
<?php if ($page < $totalPages): ?>
<a href="?page=<?= $page + 1 ?>">下頁</a>
<?php endif; ?>
<a href="?page=<?= $totalPages ?>">末頁</a>
</td>
</tr>
</table>
group() 與聚合函數 (SUM, AVG, MIN, MAX) 進行統計分析$_GET['page'] 進行嚴格驗證與過濾此範例展示了 Zend Framework 1.x 時代典型的資料庫操作模式,雖然目前主流已轉向 Zend Framework 3 / Laminas 或其他現代框架,但其查詢建構器的設計理念仍具參考價值。