PHP+mysql数据库简单分页实例-sql分页
前几天冷月写了一篇博文《php基础编程-php连接mysql数据库-mysqli的简单使用》,很多小伙伴在学习后都知道了php与mysql数据库的连接,今天冷月分享一个简单的分页实例
首先,我们来看一下效果:

这个案例其实很简单,那么,我们如何确定当前页所需要的数据是哪些呢?主要用到的核心sql语句就是:
SELECT * FROM 表名 LIMIT 起始位置,显示条数
我们应该在url后面采用GET的方式传递一个page的参数,比如:
http:// page.php?p=1
然后用$_GET['p']来接收到,这样我们就拿到了当前的页面。然后我们要定义一个常量来保存一页显示的条数。这样,我们就能够凭借起始位置,显示条数来获取数据了。
示例代码如下:
/**
* Created by 冷月小白.
* 微信公众号: 学长冷月
*/
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
</head>
<style>
div.page{
text-align: center;
}
div.content {
height: 300px;
}
div.page a{
border: 1px solid #aaaadd;
text-decoration: none;
padding: 2px 5px 2px 5px;
margin: 2px;
}
div.page span.current{
border: 1px solid #000099;
background-color: #000099;
padding: 4px 6px 4px 6px;
margin: 2px;
color: #ffffff;
font-weight: bold;
}
div.page span.disable{
border: 1px solid #eeeeee;
padding: 2px 5px 2px 5px;
margin: 2px;
color: #dddddd;
}
div.page form{
display: inline;
}
</style>
<body>
<?php
/*1.传入页码*/
$page = $_GET['p'];
/*2.根据页码取出数据, php -> mysql*/
$host = "localhost";
$username = "root";
$password = "123456";
$db = "page";
$pageSize = 3;
$showPage = 5;
//连接数据库
$conn = mysqli_connect($host, $username, $password, $db);
if (!$conn) {
var_dump("连接失败");
}
//设置数据库的编码格式,防止乱码
mysqli_query($conn, "SET NAMES UTF8");
//编写sql获取分页数据 SELECT * FROM 表名 LIMIT 起始位置,显示条数
$sql = "SELECT * FROM test LIMIT " . ($page - 1) * $pageSize . ",{$pageSize}";
//把sql语句传送数据中
$result = mysqli_query($conn, $sql);
//处理数据
echo "<div class='content'>";
echo "<table border='1' cellspacing='0' width='40%' align='center'>";
echo "<tr><td>ID</td><td>name</td></tr>";
while ($row = mysqli_fetch_assoc($result)) {
echo "<tr><td>{$row['id']}</td><td>{$row['name']}</td></tr>";
}
echo "</table></div>";
//释放结果,关闭连接
mysqli_free_result($result);
//获取数据总数
$total_sql = "SELECT COUNT(*) FROM test";
$total_result = mysqli_fetch_assoc(mysqli_query($conn, $total_sql));
$total = $total_result['COUNT(*)'];
$total_page = ceil($total / $pageSize);
mysqli_close($conn);
//3.显示数据 + 分页条
$page_banner = '<div class="page">';
if ($page > 1) {
$page_banner .= "<a href='" . "{$_SERVER['PHP_SELF']}?p=1" . "'>首页</a>";
$page_banner .= "<a href='" . "{$_SERVER['PHP_SELF']}?p=" . ($page - 1) . "'>上一页</a>";
}else{
$page_banner .= "<span class='disable'>首页</span>";
$page_banner .= "<span class='disable'>上一页</span>";
}
//初始化数据
$start = 1; //开始页面
$end = $total_page; //结束页面
$pageOffset = ($showPage - 1) / 2;
if ($total_page > $showPage) { //如果总页面大于显示的页面
if ($page > $pageOffset + 1) { //如果当前页面大于偏移量
$page_banner .= "...";
}
if ($page > $pageOffset) { //当前页大于偏移量
$start = $page - $pageOffset;
$end = $total_page > $page + $pageOffset ? $page + $pageOffset : $total_page;
} else {
$start = 1;
$end = $total_page > $showPage ? $showPage : $total_page;
}
if ($page + $pageOffset > $total_page) {
$start = $start - ($page + $pageOffset - $end);
}
}
for ($i = $start; $i <= $end; $i++) {
if ($page == $i){
$page_banner .="<span class='current'>{$i}</span>";
}else{
$page_banner .= "<a href='" . "{$_SERVER['PHP_SELF']}?p={$i}" . "'>{$i}</a>";
}
}
//尾部省略
if ($total_page > $showPage && $total_page > $page + $pageOffset){
$page_banner .= "...";
}
if ($page < $total_page) {
$page_banner .= "<a href='" . "{$_SERVER['PHP_SELF']}?p=" . ($page + 1) . "'>下一页</a>";
$page_banner .= "<a href='" . "{$_SERVER['PHP_SELF']}?p={$total_page}" . "'>尾页</a>";
}else{
$page_banner .= "<span class='disable'>下一页</span>";
$page_banner .= "<span class='disable'>尾页</span>";
}
$page_banner .= "总页数{$total_page},";
$page_banner .= "<form action='demo1.php' method='get'>";
$page_banner .= "到第<input type='text' size='2' name='p'>页";
$page_banner .= "<input type='submit' value='确定'>";
$page_banner .= "</form></div>";
echo $page_banner;
?>
</body>
</html>
想要获取源文件的小伙伴可以关注冷月的微信公众号:学长冷月。回复:分页。冷月将会把整理好的文件发给您!
欢迎关注我的公众号:学长冷月,获得独家整理的学习资源和日常干货推送。
如果您对我的专题内容感兴趣,也可以关注我的博客:guoyu7.com
PHP+mysql数据库简单分页实例-sql分页的更多相关文章
- Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句 # python3 # author lizm # datetime 2018-02-01 10:00:00 # -*- co ...
- MySQL数据库入门多实例配置
MySQL数据库入门——多实例配置 前面介绍了相关的基础命令操作,所有的操作都是基于单实例的,mysql多实例在实际生产环境也是非常实用的,因为必须要掌握 1.什么是多实例 多实例就是一台服务器上开启 ...
- Jsp分页实例---真分页
网页的分页功能的实现比较简单,实现方法也多种多样. 今天总结一个简单的Jsp真分页实例. 首先,提到分页就要先明确一个概念,何为真分页何谓假分页. 假分页:一次性从数据库读出表的所有数据一次性的返回给 ...
- MySQL 数据库性能优化之SQL优化
前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧. 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础. 优化目标 ...
- MySQL 数据库性能优化之SQL优化【转】
优化目标 减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑, ...
- php类模块引擎PDO操作MySQL数据库简单阐述
PDO是什么呢? 通俗说就是别人写的一个“数据库操作工具类”,它非常强大,可以应对市面上几乎所有主流数据库, 具体应用时候有这样一个关系: 即,要操作某种数据,就得去“打开”对应的pdo引擎. 在ph ...
- mysql数据库简单一些简单操作和总结
1. mysql 数据库操作方法: 进入数据库 mysql -uroot -p 退出 quite exit 默认引擎 innodb 查看版本 select verison(); 查看时间 select ...
- Django中使用mysql数据库并使用原生sql语句操作
Django自身默认使用sqlite3这个轻量级的数据库,但是当我们开发网站时,sqlite3就没有mysql好,sqlite3适合一些手机上开发使用的数据库. 准备的软件mysql数据库,版本5.7 ...
- python连接mysql数据库简单例子
今天用pyhton2连接本地的mysql数据库,总的来说比较简单,但还是遇到一些小问题 代码如下: # -*- coding: utf-8 -*- import os import MySQLdb i ...
随机推荐
- Promise里的代码为什么比setTimeout先执行
当浏览器或者Node拿到一段代码时首先做的就是传递给JavaScript引擎,并且要求它去执行. 然而,执行 JavaScript 并非一锤子买卖,宿主环境当遇到一些事件时,会继续把一段代码传递给 J ...
- java接入钉钉机器人(带源码)
前言 登录钉钉网页: https://im.dingtalk.com 登录说明文档地址,以备随时查询: https://ding-doc.dingtalk.com/doc#/serverapi2/qf ...
- 竹马竹马chikuma
[问题描述] 众所周知,zzh 和 heyi 是一对竹马竹马,他们从小一起学 C++,最后都成了著名的神犇.而时间回溯到他们童年,这天 zzh 邀请 heyi 来参加 zzh 举行的男性家庭聚会. 而 ...
- phpstudy nginx设置CORS跨域不起作用的可能解决方法
今天搞了半天的跨域问题,想通过nginx配置跨域,希望以后本地调试程序都不用为这件事烦心.无非就是设置几个请求头: add_header Access-Control-Allow-Origin *; ...
- [C++]最小生成树
1. 最小生成树定义 树是指没有环路的图,生成树就是指一个图上面删除一些边,使它没有环路. 最小生成树就是指生成树中边权之和最小的那一种. 上图的最小生成树就是这样: 2. Prim 算法 2.1. ...
- Html中div块居中显示
表面上这个问题很难,因为涉及到浏览器窗体大小,导致部分界面效果不一致.图中的方法适用于div块大小不变的界面. 如上所示,将其分为两块,margin-left和margin-top的值均分别为widt ...
- 【Oracle】复制表结构和表数据
1.既复制表结构也复制表数据:CREATE TABLE tab_new AS SELECT * FROM tab_old; 2.只复制表结构:CREATE TABLE tab_new AS SELEC ...
- mong 按 geometry 搜索 地理位置信息
看 地理位置索引的使用 $near $geometry
- flutter 与 android 混合开发
现有的混合开发方式,都是存flutter项目在android系统或者iOS上面跑. 但是,实际情况是,我们需要在一个成熟的native项目上面,跑几个flutter页面,逐步的进行flutter的融合 ...
- 浅谈DFS,BFS,IDFS,A*等算法
搜索是编程的基础,是必须掌握的技能.--王主任 搜索分为盲目搜索和启发搜索 下面列举OI常用的盲目搜索: 1.dijkstra 2.SPFA 3.bfs 4.dfs 5.双向bfs 6.迭代加深搜索( ...