php分页功能实现
PHP分页功能实现
基本分页逻辑
分页功能通常需要结合数据库查询和前端展示。以下是一个基本的PHP分页实现方法:
// 连接数据库
$conn = new mysqli('localhost', 'username', 'password', 'database');
// 每页显示记录数
$records_per_page = 10;
// 获取当前页码
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$start = ($page - 1) * $records_per_page;
// 查询总记录数
$total_records = $conn->query("SELECT COUNT(*) FROM table_name")->fetch_row()[0];
// 计算总页数
$total_pages = ceil($total_records / $records_per_page);
// 查询当前页数据
$result = $conn->query("SELECT * FROM table_name LIMIT $start, $records_per_page");
// 显示数据
while ($row = $result->fetch_assoc()) {
// 显示每条记录
}
// 显示分页链接
for ($i = 1; $i <= $total_pages; $i++) {
echo "<a href='?page=$i'>$i</a> ";
}
使用预处理语句增强安全性
为防止SQL注入,建议使用预处理语句:
$stmt = $conn->prepare("SELECT * FROM table_name LIMIT ?, ?");
$stmt->bind_param("ii", $start, $records_per_page);
$stmt->execute();
$result = $stmt->get_result();
分页样式优化
可以添加CSS样式美化分页导航:

echo '<div class="pagination">';
if ($page > 1) {
echo '<a href="?page='.($page-1).'">«</a>';
}
for ($i = 1; $i <= $total_pages; $i++) {
$active = ($i == $page) ? 'active' : '';
echo '<a class="'.$active.'" href="?page='.$i.'">'.$i.'</a>';
}
if ($page < $total_pages) {
echo '<a href="?page='.($page+1).'">»</a>';
}
echo '</div>';
使用分页类库
对于更复杂的需求,可以考虑使用现成的分页类库:
-
Laravel分页:

$users = DB::table('users')->paginate(15); return view('user.index', ['users' => $users]); -
Symfony分页组件:
use Knp\Component\Pager\PaginatorInterface;
public function index(PaginatorInterface $paginator, Request $request) { $query = $entityManager->createQuery('SELECT p FROM App\Entity\Post p'); $pagination = $paginator->paginate( $query, $request->query->getInt('page', 1), 10 ); return $this->render('post/index.html.twig', ['pagination' => $pagination]); }
#### AJAX分页实现
对于无刷新分页体验,可以使用AJAX:
```javascript
$(document).on('click', '.pagination a', function(e) {
e.preventDefault();
var page = $(this).attr('href').split('page=')[1];
fetch_data(page);
});
function fetch_data(page) {
$.ajax({
url:"fetch_data.php?page="+page,
success:function(data) {
$('#table_data').html(data);
}
});
}
性能优化建议
对于大数据量分页,避免使用LIMIT offset, count方式,改用基于游标的分页:
// 基于ID的分页(假设ID是自增的)
$last_id = isset($_GET['last_id']) ? (int)$_GET['last_id'] : 0;
$result = $conn->query("SELECT * FROM table_name WHERE id > $last_id ORDER BY id LIMIT $records_per_page");
以上方法涵盖了从基础到进阶的PHP分页实现方案,可根据具体项目需求选择适合的方式。






