當前位置: 首頁> 最新文章列表> 用stmt_init 實現分頁查詢功能

用stmt_init 實現分頁查詢功能

M66 2025-05-18

在PHP 中, mysqli擴展是用於與MySQL 數據庫進行交互的強大工具。當我們處理大量數據時,分頁查詢是一種非常常見且有效的技術,用來避免一次性加載所有數據。今天我們將探討如何使用mysqli::stmt_init函數來實現分頁查詢功能。

1. 什麼是分頁查詢?

分頁查詢是指將數據按一定數量分批次顯示,每一頁顯示一部分數據,而不是一次性加載全部數據。通過分頁,我們不僅能提高數據的處理效率,也能優化前端顯示效果,提升用戶體驗。

2. mysqli::stmt_init 的作用

mysqli::stmt_init函數用於初始化一個新的mysqli_stmt對象,之後可以通過該對象執行預處理語句。預處理語句能夠提高查詢效率,同時避免SQL 注入的風險。

3. 如何使用mysqli::stmt_init實現分頁查詢?

假設我們有一個users表,表中包含了大量的用戶信息,且我們希望分頁顯示這些用戶的數據。首先,我們需要計算出數據的總條數,接著根據頁碼和每頁顯示條數來計算查詢的偏移量。以下是實現分頁查詢的步驟。

4. 示例代碼

<?php
// 數據庫連接配置
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";

// 創建連接
$conn = new mysqli($servername, $username, $password, $dbname);

// 檢查連接
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// 每頁顯示的條數
$records_per_page = 10;

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

// 獲取數據總條數
$sql_count = "SELECT COUNT(*) AS total_records FROM users";
$result_count = $conn->query($sql_count);
$row = $result_count->fetch_assoc();
$total_records = $row['total_records'];

// 計算總頁數
$total_pages = ceil($total_records / $records_per_page);

// 使用 stmt_init 函數初始化預處理語句
$stmt = $conn->stmt_init();
if ($stmt->prepare("SELECT * FROM users LIMIT ?, ?")) {
    // 綁定參數
    $stmt->bind_param("ii", $start_from, $records_per_page);
    
    // 執行查詢
    $stmt->execute();
    
    // 獲取結果
    $result = $stmt->get_result();
    
    // 輸出數據
    while ($row = $result->fetch_assoc()) {
        echo "ID: " . $row['id'] . " - Name: " . $row['name'] . "<br>";
    }
    
    // 釋放結果集
    $stmt->free_result();
    
    // 關閉預處理語句
    $stmt->close();
}

// 關閉數據庫連接
$conn->close();
?>

<!-- 顯示分頁鏈接 -->
<div>
    <p>Page: 
        <?php
        // 分頁導航
        for ($i = 1; $i <= $total_pages; $i++) {
            echo "<a href='m66.net?page=$i'>$i</a> ";
        }
        ?>
    </p>
</div>

5. 解釋代碼

  • 數據庫連接:使用new mysqli()創建與數據庫的連接。如果連接失敗,代碼會顯示錯誤信息並終止執行。

  • 計算分頁偏移量:每頁顯示的記錄數為records_per_page ,根據當前頁碼$page計算出從哪一條記錄開始查詢。 $start_from = ($page - 1) * $records_per_page計算得出偏移量。

  • 獲取總記錄數:我們執行一個查詢來獲取users表的總記錄數,從而計算出總頁數。

  • 執行分頁查詢:使用stmt_init()初始化一個預處理語句,通過prepare()方法編寫查詢, bind_param()方法綁定查詢的參數,然後執行查詢並獲取結果。

  • 顯示分頁導航:通過一個循環,生成分頁鏈接,點擊每個頁碼會跳轉到相應的頁面,使用m66.net?page=$i格式顯示。

6. 總結

使用mysqli::stmt_init函數進行分頁查詢,不僅能提高數據查詢的效率,還能有效防止SQL 注入。在實際開發中,分頁查詢常用於需要展示大量數據的場景,通過合理的分頁設計,能夠顯著提升系統性能和用戶體驗。

希望這篇文章能夠幫助你理解如何使用mysqli::stmt_init函數實現分頁查詢功能。如果你有任何疑問或者需要進一步探討的地方,歡迎留言討論!