類別核心屬性
class RSPage {
var $Link_ID = 0; // 資料庫連線 ID
var $m_pageSize = 10; // 每頁筆數
var $m_curPage = 1; // 當前頁碼
var $m_num = -1; // 總筆數 (-1 表自動計算)
var $m_sql; // 原始 SQL
var $Parse; // 結果集資源
var $Error = ""; // 錯誤訊息
// ... 其他屬性省略 ...
}
關鍵方法:query()
function query($Query_String, $page=1, $cnt=-1, $size=10) {
$this->m_pageSize = $size;
$this->m_curPage = max(1, $page);
// 1. 取得總筆數
if ($cnt != -1) {
$this->m_num = $cnt;
} else {
$res = mysql_query($Query_String, $this->Link_ID);
$this->m_num = mysql_num_rows($res);
mysql_free_result($res);
}
// 2. 計算分頁資訊
$pageCount = ceil($this->m_num / $this->m_pageSize);
if ($this->m_curPage > $pageCount) $this->m_curPage = $pageCount;
// 3. 組合 LIMIT 查詢
$posBegin = ($this->m_curPage - 1) * $this->m_pageSize;
$sql = "$Query_String LIMIT $posBegin, $this->m_pageSize";
// 4. 執行並回傳結果集
$this->Parse = mysql_query($sql, $this->Link_ID);
return $this->Parse;
}
使用範例
$db = mysql_connect('localhost', 'user', 'pass');
mysql_select_db('mydb');
$page = new RSPage();
$page->open($db);
$page->query("SELECT * FROM products WHERE category=3", $_GET['page'], -1, 20);
while ($row = mysql_fetch_assoc($page->Parse)) {
echo $row['name'] . '<br>';
}
// 顯示分頁連結 (需自行實作導航邏輯)
echo "第 {$page->m_curPage} 頁 / 共 " . ceil($page->m_num / $page->m_pageSize) . " 頁";
特色與限制
- 優點:介面簡潔、支援手動傳入總筆數 (避免 COUNT(*) 全表掃描)、自動處理頁碼邊界。
- 缺點:依賴已棄用的
mysql_* 函數、無內建導航生成、錯誤處理較簡單。
- 現代化建議:改用 PDO、加入介面定義、支援游標分頁、整合 PSR-3 Logger。