Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
PHP与MySQL:实现数据库查询结果分页显示详解_创想鸟

PHP与MySQL:实现数据库查询结果分页显示详解

PHP与MySQL:实现数据库查询结果分页显示详解

本文将详细介绍如何使用phpmysql实现数据库查询结果的分页显示功能。通过计算总记录数、确定每页显示数量以及动态生成sql `limit` 子句,我们将构建一个完整的后端逻辑,并结合html/css创建交互式分页导航。本教程涵盖从数据查询到页面渲染的全过程,旨在帮助开发者高效管理大量数据展示。

在Web开发中,当数据库查询结果集非常庞大时,一次性加载所有数据不仅效率低下,还会严重影响用户体验。因此,实现数据的分页显示成为一项基本且重要的功能。本教程将指导您如何利用PHP和MySQL的强大能力,结合HTML和CSS,构建一个健壮、高效且用户友好的分页系统。

核心概念与原理

数据分页的核心思想是将一个大型结果集分割成多个较小的、可管理的页面。这通常涉及到以下几个关键概念:

总记录数 (Total Records):数据库中符合查询条件的总条目数。这是计算总页数的基础。每页显示数量 (Page Size):每个页面希望显示的数据条目数。总页数 (Total Pages):根据总记录数和每页显示数量计算出的总页面数量。当前页码 (Current Page):用户当前正在查看的页面编号。SQL LIMIT 子句:MySQL(以及其他SQL数据库)提供 LIMIT offset, row_count 子句,用于从结果集中跳过 offset 条记录,然后返回 row_count 条记录。这是实现分页查询的关键。

后端数据处理:PHP与MySQL

我们将使用PHP来处理数据库交互和分页逻辑。假设您已经建立了一个名为 $conn 的MySQLi数据库连接。

1. 获取总记录数

首先,我们需要查询数据库中符合条件的总记录数,以便计算出总页数。

立即学习“PHP免费学习笔记(深入)”;

query($sql_count);if ($result_count) {    $row_count = $result_count->fetch_assoc();    $total_rows = $row_count['total_rows']; // 数据库中的总记录数} else {    $total_rows = 0;    // 错误处理    error_log("查询总记录数失败: " . $conn->error);}?>

2. 分页参数计算

接下来,根据总记录数和预设的每页显示数量,计算出总页数以及当前页面的偏移量。

 0 ? $total_pages : 1));// 计算 SQL 查询的起始偏移量$offset = ($current_page - 1) * $pagesize;// 如果没有记录,确保 offset 不为负if ($total_rows == 0) {    $offset = 0;}?>

解释:

filter_input(INPUT_GET, ‘page’, FILTER_SANITIZE_NUMBER_INT) 安全地获取URL中的 page 参数,并将其转换为整数。?: 1 是PHP 7+ 的 null 合并运算符,如果 page 参数不存在或无效,则默认设置为 1。max(1, min($current_page, $total_pages > 0 ? $total_pages : 1)) 确保 $current_page 始终是一个有效的页码。如果 $total_pages 为 0(即没有记录),则将其限制为 1。$offset 是 LIMIT 子句需要的起始位置,它是基于0的索引。

3. 构建分页查询并获取数据

使用计算出的 $offset 和 $pagesize 来构建带有 LIMIT 子句的SQL查询。为了防止SQL注入,我们强烈建议使用预处理语句。

prepare($sql_data);if ($stmt) {    // 绑定参数:'ii' 表示两个参数都是整数    $stmt->bind_param('ii', $offset, $pagesize);    // 执行语句    $stmt->execute();    // 绑定结果到变量    $stmt->bind_result($sid, $hunters, $smoker, $boomers, $spitters, $jockeys, $charger, $total_kills);    $output_table = '    ';    // 遍历结果集并生成表格行    while ($stmt->fetch()) {        $output_table .= sprintf('        ',         htmlspecialchars($sid),         htmlspecialchars($total_kills),         htmlspecialchars($hunters),         htmlspecialchars($jockeys),         htmlspecialchars($charger),         htmlspecialchars($smoker),         htmlspecialchars($boomers),         htmlspecialchars($spitters)        );    }    $output_table .= '
Player Total Kills Hunter Jockey Charger Smoker Boomer Spitter
%s %s %s %s %s %s %s %s
'; $stmt->close(); // 关闭语句} else { $output_table = "

数据查询失败: " . $conn->error . "

"; error_log("准备SQL语句失败: " . $conn->error);}?>

解释:

LIMIT ?, ? 使用问号作为占位符,分别对应 offset 和 pagesize。$conn->prepare($sql_data) 创建一个预处理语句对象。$stmt->bind_param(‘ii’, $offset, $pagesize) 将变量绑定到占位符。’ii’ 指定了两个参数都是整数类型。$stmt->execute() 执行查询。$stmt->bind_result(…) 将查询结果的每一列绑定到指定的PHP变量。while ($stmt->fetch()) 循环遍历结果集,每次迭代都会将当前行的数据填充到绑定的变量中。htmlspecialchars() 用于防止XSS攻击,确保输出到HTML的内容是安全的。

前端页面渲染与分页导航

现在,我们已经获取了当前页的数据,并将其格式化为HTML表格。接下来,我们需要创建分页导航链接,让用户可以在不同页面之间切换。

<?php// ... (接上一步代码)// 生成分页链接$footer_pagination = '

Website built & designed by Blade

';// 渲染所有内容echo $output_table;echo $footer_pagination;$conn->close(); // 关闭数据库连接?>

解释:

我们动态生成 “首页”、”上一页”、”下一页” 和 “末页” 链接。如果当前页是第一页,”首页”和”上一页”会显示为不可点击的文本(或带有禁用样式)。同理,末页也是如此。数字页码循环从1到 $total_pages。当前页码的链接会添加 active 类,以便通过CSS进行样式高亮。所有链接都使用 ?page=X 的URL格式来传递页码参数。

完整示例代码

将上述所有代码片段组合起来,形成一个完整的 index.php 文件(或其他您希望的文件名)。

connect_error) {    die("连接失败: " . $conn->connect_error);}// 1. 获取总记录数$sql_count = "SELECT COUNT(*) AS total_rows FROM Special_Infected_Kills";$result_count = $conn->query($sql_count);if ($result_count) {    $row_count = $result_count->fetch_assoc();    $total_rows = $row_count['total_rows'];} else {    $total_rows = 0;    error_log("查询总记录数失败: " . $conn->error);}// 2. 分页参数计算$pagesize = 20; // 每页显示20条记录// 计算总页数,如果没有记录,至少有一页$total_pages = ceil($total_rows / $pagesize);if ($total_rows == 0) {    $total_pages = 1; // 至少显示一页,即使没有数据}// 获取当前页码,默认为第一页$current_page = filter_input(INPUT_GET, 'page', FILTER_SANITIZE_NUMBER_INT) ?: 1;// 确保当前页码在有效范围内$current_page = max(1, min($current_page, $total_pages));// 计算 SQL 查询的起始偏移量$offset = ($current_page - 1) * $pagesize;// 3. 构建分页查询并获取数据$sql_data = "SELECT                 STEAM_ID, Hunters, Smoker, Boomers, Spitters, Jockeys, Charger,                (Hunters + Smoker + Boomers + Spitters + Jockeys + Charger) AS Total_Kills             FROM Special_Infected_Kills              ORDER BY Total_Kills DESC             LIMIT ?, ?";$stmt = $conn->prepare($sql_data);$output_table = '';if ($stmt) {    $stmt->bind_param('ii', $offset, $pagesize);    $stmt->execute();    $stmt->bind_result($sid, $hunters, $smoker, $boomers, $spitters, $jockeys, $charger, $total_kills);    $output_table = '    ';    while ($stmt->fetch()) {        $output_table .= sprintf('        ',         htmlspecialchars($sid),         htmlspecialchars($total_kills),         htmlspecialchars($hunters),         htmlspecialchars($jockeys),         htmlspecialchars($charger),         htmlspecialchars($smoker),         htmlspecialchars($boomers),         htmlspecialchars($spitters)        );    }    $output_table .= '
Player Total Kills Hunter Jockey Charger Smoker Boomer Spitter
%s %s %s %s %s %s %s %s
'; $stmt->close();} else { $output

以上就是PHP与MySQL:实现数据库查询结果分页显示详解的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1338630.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
使用HTML mailto 协议实现表单邮件发送
上一篇 2025年12月13日 02:13:56
PHP动态类名访问与静态分析中的类型提示技巧
下一篇 2025年12月13日 02:14:11

相关推荐

  • Linux基础必知必会(一)

    文章目录 前言 一、初识Linux操作系统 二、网络配置原理 三、虚拟机网络配置原理 四、虚拟机网络环境配置 五、远程工具Xshell 六、Linux目录结构讲解 七、Linux常用的命令讲解 八、用户和用户组的管理 结语 前言 为什么需要学习Linux系统? 许多人可能疑惑,为什么在当前可视化操作…

    2026年9月22日
    1100
  • MySQL SHOW 语句与预处理参数绑定:深入解析与解决方案

    本文深入探讨了在PHP PDO中尝试使用参数绑定执行SHOW VARIABLES LIKE :var查询时遇到的常见问题。核心原因是MySQL对SHOW类语句的预处理存在限制,导致无法直接绑定参数。文章提供了多种有效的替代方案,包括字符串拼接(需注意安全)以及更推荐的通过WHERE variable…

    2026年9月22日
    400
  • Workerman与PHP协同开发:构建高性能的Web应用程序

    workerman与php协同开发:构建高性能的web应用程序 引言:在今天互联网高速发展的时代,Web应用程序的高性能已成为用户体验和竞争力的重要因素。而PHP作为一种广泛使用的服务器端开发语言,其性能优化一直备受关注。本文将介绍如何利用Workerman与PHP协同开发,从而构建高性能的Web应…

    用户投稿 2026年9月22日
    000
  • 解决PHP扩展缺失错误:phpinfo验证与服务重启指南

    本文旨在解决%ignore_a_1%脚本运行时提示特定扩展(如json、mbstring)缺失的问题,即便用户已在php配置中手动启用。核心解决方案是利用`phpinfo()`函数验证扩展的实际加载状态,并强调在修改php配置后,必须重启相关的web服务器或php-fpm服务,以确保新的配置生效。 …

    2026年9月22日
    100
  • Sublime连接远程MySQL数据库设置步骤_支持本地开发连接云端实例

    sublime本身无法直接连接远程mysql数据库,但可通过插件或脚本实现。1. 安装db browser插件进行简单查询;2. 使用terminal插件运行命令行连接;3. 编写python/php脚本测试连接;4. 确保远程mysql允许外部访问并开放防火墙端口;5. 通过terminal插件快…

    2026年9月22日
    000
  • Oracle定时任务

    oracle 介绍 oracle job 是应用在数据库层面,用来定时执行存储过程或者 SQL 语句的定时器。 测试数据代码语言:javascript代码运行次数:0运行复制 –建测试表CREATE TABLE TEST_JOB( DATETIME DATE, BEG_DATE VARCHAR2(…

    2026年9月22日
    500
  • PHP数组中JSON字符串值的解析与访问教程

    本教程将详细指导如何在PHP中处理包含JSON字符串的数组。通过利用json_decode()函数,您可以轻松地将这些JSON字符串转换为可操作的PHP数组,进而提取并访问其中嵌套的shortname、fullname等具体字段,从而实现对复杂数据结构的有效管理和利用。 理解问题:PHP数组中的JS…

    2026年9月22日
    000
  • 递增操作符对PHP类静态属性的影响_PHP静态属性递增行为

    静态属性在PHP中被类的所有实例共享,使用++操作符递增时会修改唯一的内存副本。例如定义计数器属性 $count,每次调用 increment() 方法均使其加1,无论通过哪个对象实例。这种机制适用于统计对象创建次数、追踪全局状态等场景。由于静态属性生命周期贯穿整个请求,递增值持续累积,可能导致内存…

    2026年9月22日
    100
  • Sublime开发MySQL备份与恢复脚本方案_实现定时导出与自动导入机制

    Sublime开发MySQL备份与恢复脚本方案_实现定时导出与自动导入机制Sublime开发MySQL备份与恢复脚本方案_实现定时导出与自动导入机制Sublime开发MySQL备份与恢复脚本方案_实现定时导出与自动导入机制Sublime开发MySQL备份与恢复脚本方案_实现定时导出与自动导入机制

    使用sublime编写mysql备份与恢复脚本能提升数据安全性与操作效率;1.通过shell或python调用mysqldump实现自动备份,建议加入时间戳、压缩存储及权限设置;2.结合cron配置定时任务实现自动化,注意使用绝对路径并添加日志记录;3.编写恢复脚本导入sql文件,需确保数据库结构一…

    2026年9月22日 用户投稿
    000
  • 谷歌浏览器官网直接进入 Chrome浏览器官方登录入口

    谷歌浏览器官网直接进入方式为访问https://www.google.com/chrome/,该网站是Chrome官方登录入口,提供跨平台同步、V8引擎加速、地址栏集成搜索、自动填充表单等核心功能,支持极简界面、深色模式、自定义新标签页及侧边栏服务,具备安全浏览、隐私沙盒、密码检查和无痕模式等安全机…

    2026年9月22日
    100
  • 如何在mysql中实现热备份

    最推荐的MySQL热备份方案是结合Percona XtraBackup全量备份与binlog增量备份,并通过主从复制实现高可用。首先使用XtraBackup对InnoDB引擎进行在线全量备份,无需锁表;备份后执行–prepare确保数据一致性,恢复时用–copy-back还原…

    2026年9月22日
    000
  • 在月球上用肉眼能清晰地看到长城吗?蚂蚁庄园今日答案最新10.24

    或许有的用户还不知道在月球上用肉眼能清晰地看到长城吗?蚂蚁庄园今日答案最新10.24,下面让php的小编为你解答这个问题,快来看看吧! 立即进入“各种好用的网站推荐☜☜☜☜☜点击进入”; 蚂蚁庄园非常好玩,养鸡的同时还能做慈善,增进知识的同时还可以免费领取小鸡饲料。 蚂蚁庄园课堂今天的问题是: 在月…

    2026年9月22日
    900
  • Laravel 8 注册成功但登录失败的解决方案

    本文针对 Laravel 8 中使用 php artisan ui:auth 生成的认证系统,注册功能正常但登录功能失效的问题,提供了一种解决方案。通过重写 LoginController 中的 username() 方法,将认证字段从默认的 email 修改为 username,从而解决登录失败的…

    2026年9月22日
    000
  • MySQL跨数据库查询技巧_实现不同数据库间的数据联动操作

    MySQL跨数据库查询技巧_实现不同数据库间的数据联动操作MySQL跨数据库查询技巧_实现不同数据库间的数据联动操作MySQL跨数据库查询技巧_实现不同数据库间的数据联动操作MySQL跨数据库查询技巧_实现不同数据库间的数据联动操作

    mysql跨数据库查询的核心方法是在sql语句中通过“数据库名.表名”方式指定不同数据库的表,实现数据联动。1.在同一个mysql实例内,直接使用数据库名加表名进行关联查询,如db_user.users和db_order.orders,前提是用户需具备相应权限且建议对关联字段建立索引以提升性能;2.…

    2026年9月22日 用户投稿
    400
  • 一杯热水在变凉的过程中温度是匀速下降的吗?蚂蚁庄园课堂今天答案最新10月24日

    肯定有许多的童鞋想明白一杯热水在变凉的过程中温度是匀速下降的吗?蚂蚁庄园课堂今天答案最新10月24日,下面由php的小编为你带来答案哦,跟小编一起来看看哦。 立即进入“各种好用的网站推荐☜☜☜☜☜点击进入”; 蚂蚁庄园非常好玩,养鸡的同时还能做慈善,增进知识的同时还可以免费领取小鸡饲料。 蚂蚁庄园课…

    2026年9月22日
    2300
  • MySQL复杂查询语句写作技巧_Sublime环境中编写多表关联逻辑

    MySQL复杂查询语句写作技巧_Sublime环境中编写多表关联逻辑MySQL复杂查询语句写作技巧_Sublime环境中编写多表关联逻辑MySQL复杂查询语句写作技巧_Sublime环境中编写多表关联逻辑MySQL复杂查询语句写作技巧_Sublime环境中编写多表关联逻辑

    提升mysql多表查询性能与可读性的方法包括:1. 优化索引,确保join和where字段有合适索引,理解复合索引左前缀原则;2. 使用cte分解逻辑,使结构清晰易维护;3. 利用sublime text插件如sqltools、sublimelinter提升编写效率;4. 拆解复杂逻辑,逐步构建查询…

    2026年9月22日 用户投稿
    100
  • unix怎么安装php_unix系统安装php环境指南

    首先确认系统环境并检查是否已安装相关软件,然后选择包管理器或源码编译方式安装PHP;推荐使用包管理器快速安装,如Debian/Ubuntu用apt,CentOS/RHEL/Fedora用yum或dnf,FreeBSD用pkg;安装后配置Web服务器,Apache需加载mod_php或集成PHP-FP…

    2026年9月22日
    300
  • itextpdf freemarker渲染

    关于打印pdf操作的需求,经过研究,发现以下两种方法: 在现有的模板上进行编辑,这种方法操作难度较大。而通过FreeMarker生成静态页面,然后转换为HTML,操作更为顺畅。动态生成PDF的方法在网上参考较多,经过对比,我认为使用FreeMarker结合IText生成PDF最为简单。参考链接为ht…

    2026年9月22日
    400
  • 消逝的光芒困兽中文奖杯列表一览 奖杯全收集图鉴

    消逝的光芒困兽中文奖杯列表一览 奖杯全收集图鉴消逝的光芒困兽中文奖杯列表一览 奖杯全收集图鉴消逝的光芒困兽中文奖杯列表一览 奖杯全收集图鉴消逝的光芒困兽中文奖杯列表一览 奖杯全收集图鉴

    《消逝的光芒困兽》游戏中,一共有31个奖杯,15个铜杯、9个银杯、6个金杯和1个白金奖杯。本篇攻略就为大家带来中文奖杯列表一览。 消逝的光芒困兽中文奖杯列表一览 野兽出笼 解锁全部奖杯 逃出生天 逃出男爵的地堡 路见不平 在市政厅救出幸存者 闭门不出 发现男爵搞的破坏 固执己见 被大山压在头上 千里…

    2026年9月22日 用户投稿
    600
  • 使用空值合并运算符为数组元素设置默认值

    本文将介绍如何使用 PHP 的空值合并运算符 (??) 为数组元素设置默认值,尤其是在处理用户输入时。 通过该运算符,可以在变量值为 null 或不存在时,提供一个备选值,从而简化代码并提高可读性。我们将通过一个实际的 Laravel 邮件发送示例,演示如何在请求参数中缺失主题时,设置默认主题。 空…

    2026年9月22日
    600

发表回复

登录后才能评论
关注微信