Phân trang kết quả truy vấn MySQL bằng PHP
Hướng dẫn cách phân trang kết quả truy vấn từ MySQL bằng PHP. Mã PHP này giúp chia nhỏ dữ liệu từ cơ sở dữ liệu MySQL thành các trang riêng biệt để hiển thị hiệu quả hơn.
<?php
// Kết nối cơ sở dữ liệu
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database";
$conn = new mysqli($servername, $username, $password, $dbname);
// Kiểm tra kết nối
if ($conn->connect_error) {
die("Kết nối không thành công: " . $conn->connect_error);
}
// Thiết lập số lượng kết quả trên mỗi trang
$results_per_page = 10;
// Xác định số trang hiện tại
if (isset($_GET['page'])) {
$page = $_GET['page'];
} else {
$page = 1;
}
// Xác định vị trí bắt đầu của kết quả trong CSDL
$start_from = ($page - 1) * $results_per_page;
// Truy vấn cơ sở dữ liệu với giới hạn kết quả cho mỗi trang
$sql = "SELECT * FROM table_name LIMIT $start_from, $results_per_page";
$result = $conn->query($sql);
// Hiển thị kết quả
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"]. " - Name: " . $row["name"]. "<br>";
}
} else {
echo "Không có dữ liệu.";
}
// Đếm tổng số lượng kết quả trong cơ sở dữ liệu
$sql_total = "SELECT COUNT(id) AS total FROM table_name";
$result_total = $conn->query($sql_total);
$row_total = $result_total->fetch_assoc();
$total_pages = ceil($row_total["total"] / $results_per_page);
// Tạo các liên kết đến các trang
for ($i = 1; $i <= $total_pages; $i++) {
echo "<a href='pagination.php?page=" . $i . "'>" . $i . "</a> ";
}
// Đóng kết nối
$conn->close();
?>
Giải thích chi tiết:
-
Kết nối cơ sở dữ liệu:
$conn = new mysqli($servername, $username, $password, $dbname)
: Kết nối đến cơ sở dữ liệu MySQL.
-
Thiết lập số lượng kết quả trên mỗi trang:
$results_per_page = 10
: Xác định số lượng bản ghi sẽ hiển thị trên mỗi trang.
-
Xác định số trang hiện tại:
$_GET['page']
: Lấy số trang từ URL. Nếu không có trang được chỉ định, mặc định là trang 1.
-
Xác định vị trí bắt đầu của kết quả:
$start_from = ($page - 1) * $results_per_page
: Xác định bản ghi bắt đầu để hiển thị trên mỗi trang.
-
Truy vấn cơ sở dữ liệu với giới hạn kết quả:
LIMIT $start_from, $results_per_page
: Truy vấn dữ liệu từ vị trí$start_from
với số lượng kết quả$results_per_page
.
-
Đếm tổng số lượng kết quả:
SELECT COUNT(id) AS total FROM table_name
: Đếm tổng số lượng bản ghi trong bảng để xác định số trang cần có.
-
Tạo các liên kết đến các trang:
for ($i = 1; $i <= $total_pages; $i++)
: Tạo các liên kết đến các trang dựa trên tổng số lượng trang.
-
Đóng kết nối:
$conn->close()
: Đóng kết nối đến cơ sở dữ liệu.
Phiên bản PHP:
Mã này có thể chạy trên các phiên bản PHP từ 5.0 trở lên và yêu cầu extension MySQLi.