惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Full Disclosure
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
Microsoft Azure Blog
Microsoft Azure Blog
The GitHub Blog
The GitHub Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Recorded Future
Recorded Future
Y
Y Combinator Blog
Cloudbric
Cloudbric
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
Schneier on Security
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
C
Cybersecurity and Infrastructure Security Agency CISA
TaoSecurity Blog
TaoSecurity Blog
Security Latest
Security Latest
N
News and Events Feed by Topic
Hacker News - Newest:
Hacker News - Newest: "LLM"
D
DataBreaches.Net
Security Archives - TechRepublic
Security Archives - TechRepublic
H
Hacker News: Front Page
C
Cisco Blogs
L
LangChain Blog
aimingoo的专栏
aimingoo的专栏
Recent Commits to openclaw:main
Recent Commits to openclaw:main
V
Vulnerabilities – Threatpost
L
LINUX DO - 最新话题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Google Online Security Blog
Google Online Security Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
A
About on SuperTechFans
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Jina AI
Jina AI
C
CXSECURITY Database RSS Feed - CXSecurity.com
Schneier on Security
Schneier on Security
T
Tenable Blog
N
News and Events Feed by Topic
W
WeLiveSecurity
有赞技术团队
有赞技术团队
AI
AI
爱范儿
爱范儿
大猫的无限游戏
大猫的无限游戏
Latest news
Latest news
T
The Blog of Author Tim Ferriss
S
Security Affairs
Know Your Adversary
Know Your Adversary
Simon Willison's Weblog
Simon Willison's Weblog
G
GRAHAM CLULEY
Google DeepMind News
Google DeepMind News
The Cloudflare Blog

文章列表 - 她和她的猫

使用小鹤双拼一个月 折腾 Hugo PaperMod 主题 去长鹿旅游休博园 1Password 自动化登录堡垒机 深入 Hyperf:Inject 注解是如何工作的? 译|理解容器镜像层 使用 Rust 实现高性能预写日志(Write Ahead Log) 译|使用 Linux 命名空间隔离系统 深入 Hyperf:HTTP 服务是如何处理请求的? Linux 文件权限学习笔记 译|了解 Bitcask:基于日志结构的 KV 存储引擎 还原 SM2 压缩公钥的几种方法 深入 Hyperf:HTTP 服务启动时发生了什么? 一次 Hyperf 注解失效问题分析 将博客迁移到又拍云 译|PHP 7 新的 Hashtable 实现 排查 ES 查询问题:深入了解 json_encode() 函数 浅析 Redlock 分布式锁实现原理 Yar 源码阅读笔记:RPC 服务端 Yar 源码阅读笔记:客户端的并行调用 Yar 源码阅读笔记:客户端的同步调用 Yar 源码阅读笔记:数据传输模块 Yar 源码阅读笔记:消息编码模块 Yar 源码阅读笔记:RPC 通信协议 Yar 源码阅读笔记:开篇 PHP 8 新特性介绍 基于 OpenSSL 实现国密 SM4 加解密 PHP 源码阅读笔记:编译与调试 PHP 什么是惊群问题 大端模式和小端模式 基于 GitHub Actions 定时推送网址到百度站长平台 聊聊五种 I/O 模型 Workerman 源码分析:文件上传 浅入浅出 HTTP 协议 PHP 网络编程:构建 MySQL 蜜罐获取攻击者微信 ID 使用 Workerman 接入 Bilibili 直播弹幕协议 使用 GitHub Actions 自动部署 Hexo 什么是二进制安全 【转载】PHP 程序员进阶之路 优化 Workerman 检查主进程是否存活的逻辑 基于 Redis 实现分布式锁 《PHP 实现 Base64 编码/解码》笔记 PHP 多进程下载必应壁纸 基于 Redis 实现延迟队列 【转载】PHP 实现 Base64 编码/解码 使用 MySQL FIELD() 函数自定义排序规则 Laravel 的 Facades 实现原理 C语言单链表实现约瑟夫环 数据结构学习笔记:顺序栈和链栈(C语言) 使用 QueryList + Redis 下载壁纸 在 Laravel 登录/注册中使用 mews/captcha 扩展包 使用 mews/captcha 扩展包为 Laravel 应用添加图片验证码 给 YOURLS 短网址系统编写插件《批量生成短网址》 给 YOURLS 短网址系统编写插件《Hello World!》 PHP 7.1 使用 json_encode 函数造成浮点类型数据出现精度问题 Laravel 授权策略(Policy)的基本使用 Ubuntu 系统下 WiFi 频繁掉线解决方法 Laravel 应用部署到 Nginx 服务器上的第一个坑 Ubuntu 16.04 LST 安装 Redis 和 Composer PHP 采集逐浪小说章节列表 Nginx 环境 SSL 强制 HTTP 301 跳转到 HTTPS 【工作&生活】第一周 ServiceStack.Redis 与多线程 Count the number of Duplicates C# Base64 加密及解密 ASP.NET MVC 使用动态类型传递数据 Django 使用 order_by() 对数据进行排序操作 ASP.NET + jQuery + AJAX 实现用户登录 ASP.NET 从客户端中检测到有潜在危险的 Request.Form 值 ASP.NET 使用 FormData 实现 AJAX 上传图片 Python 使用 BeautifulSoup 抓取网页 贪心算法之字符串的完美度 一言不和就造轮子之 CookieHelper ASP.NET 上传图片 DBHelper 类 C# 捕获屏幕源码 用 JavaScript 做一些有趣的事情 第一篇文章 好久不见。 如何防止非法调用 PHP 文件 清明小记。 PHP 生成随机字符串 Z-Blog PHP 程序做 301 跳转 PHP 处理数组常用的几个函数 Sublime Text 3 快捷键总结 PHP 使用 file_get_contents() 函数实现采集网页 使用 C# 编写学生信息管理系统 终于到了。 zblog报错: magic_quotes_gpc 和 safe_mode 世事无常。 如何使用 PHP 上传文件 安卓手机编写和运行 PHP 程序的软件 使用 AJAX 刷新、验证 PHP 图片验证码 PHP 生成图片验证码 PHP 之 session 的使用方法 PHP 之 cookie 的使用方法 Thinkphp 框架中系统常量在 Js 文件中不解析的解决方法
PHP 实现分页原理详解
她和她的猫 · 2016-01-28 · via 文章列表 - 她和她的猫

分页在网站上面是一个必不可少的东西,例如在论坛上,只有几十张帖子那很好办,在一页显示就可以了,可是如果论坛有几千甚至几十万帖子的话,如果都在一页显示的话无论对浏览器还是用户都是一种折磨,而且如果数据上亿,从数据库里查询一次的话,对服务器的压力是很大的。所以就有了分页这个东西,接下来给大家讲一下如何实现分页。

假设我们有 100 条数据,要在每页中显示 10 条,这样的话就会分 10 页来显示,我们先看一看在 MySQL 里提取 10 条数据是如何操作的。

mysql_query("SELECT * FROM `article`  LIMIT 0, 10");

上面是一条很简单的数据库查询语句,它的意思就是从名叫 “article” 的表里面提取 10 条数据,细心的朋友可能已经知道了,这条查询语句最关键的就是 limt 0, 10。为了让你们更容易理解,我用 a 和 b 替换掉 0 和 10。limit a, b 就是从第a条记录开始,取出 b 条数据,a 表示从哪里开始取出数据,b 表示取多少条,也就是限定条件,限定他只能取多少条。假如一页显示 10 条数据,那么 b 就是 10,一页显示 20 条数据,b 就是 20。

看几个例子:

Limit 0,10        //第一页
Limit 10,10       //第二页
Limit 20,10       //第三页
Limit 30,10       //第四页

看出什么规律了吗?没错,每翻一页,第一个参数加 10,而第二个参数一直不变。

可能有人就会问,为什么第一个参数会变,而第二个参数不变呢?上面已经说过了,第一个参数表示从哪里开始,每翻一页加 10,这 10 条数据在上一页已经显示过了,所以就要加 10 从它的后面开始取出这一页数据。第二个参数因为我们要每一页都只显示 10 条数据,所以第二个数值一直不变。

也就是说,只要我们改变第一个参数的值就可以实现分页了,那我们要怎么改变呢?没错,用url的GET方式获取页数。例如 index.php?page=5 相信大家对这种url不陌生吧?可以说随处可见,其中的 page 参数就是要显示的页数。

看一小段代码:

$page = $_GET['page'];// 接受url中的page参数
if($page == ""){
    $page = 1;    //如果page不存在,那么页数就是1;
}
$page_size = 10;    //每页显示10条数据,也就是第二个参数

现在我们要获取数据库中到底有多少条数据,才能判断要分多少页,

具体的公式:总数据条数 除以 每页显示的条数等于总页数,也就是说 100/10=10,还有一种情况有余数, 10/3=3.3333 有余数存在总页数就要加1,所以总页数为4 。

计算页数代码:

$total = mysql_num_rows(mysql_query("SELECT * FROM `article`")); //查询总共有多少条数据
$page_num = ceil($total / $page_size);      //获得总页数 ( 总数据条数 除以 每页显示的条数 )
$offset = ($page - 1) * $page_size;    // 获取limit第一个参数 (传入的页数-1) * 每页显示的条数
//假如第一页则为(1-1)*10=0,第二页为(2-1)*10=10
$info = mysql_query("SELECT * FROM `article` limit $offset, $page_size");   //获取相应页数所需要显示的数据

还有最后一步,显示分页信息,代码部分:

if ($page > 1) {
    echo '« 上页 ';
}
for ($i = 1; $i <= $page_num; $i++) {
    if ($i == $page) {
        echo '' . $i . ' ';
        continue;
    }
    echo '' . $i . ' ';
}
if ($page < $page_num) {
    echo '下页 » ';
}

这是一篇过去很久的文章,其中的信息可能已经有所发展或是发生改变。