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 ...
随机推荐
- await Task.Yield()和await Task.CompletedTask有什么不同
有时候我们在代码中要执行一些非常耗时的操作,我们不希望这些操作阻塞调用线程(主线程)的执行,因为调用线程(主线程)可能还有更重要的工作要做,我们希望将这些非常耗时的操作由另外一个线程去执行,这个时候就 ...
- Flutter兼容AndroidX
参考官方文档:https://flutter.dev/docs/development/packages-and-plugins/androidx-compatibility 第一步 distribu ...
- redis简单操作
一.redis 基础操作 1.1.string 类型及操作 string 是最简单的类型,一个key对应一个value,string类型是二进制安全的.redis的string可以包含任何数据. 1. ...
- 2018 Multi-University Training Contest 10
Recently, TeaTree acquire new knoledge gcd (Greatest Common Divisor), now she want to test you. As ...
- Postman 的替代品来了
Postwoman 一个开源.免费.快速.漂亮的 API 构建器,可以替代 Postman. 这个名字起得挺有意思,感觉像 Postman 的媳妇. Postwoman 的诞生过程: 它的作者是一个全 ...
- EFCore-脚手架Scaffold发生Build Failed问题的终极解决
大家在使用EntityFrameworkCore的DBFirst的脚手架(Scaffolding)时应该遇到过Build Failed的错误,而没有任何提示,我也遇到过不少次,目前已经完美解决并将排查 ...
- PSP第一次总结
项目计划总结 周活动总结表 姓名:王金萱 ...
- Browser Security-同源策略、伪URL的域
同源策略 同源策略的文档模型 同源策略(Same Origin policy,SOP),也称为单源策略(Single Origin policy),它是一种用于Web浏览器编程语言(如JavaScri ...
- MYGUI3.2改造——与HGE结合,实现资源打包
其实这个有点标题党的意思.MYGUI本身有资源打包的接口,可以实现从内存读取文件. 而HGE也提供了资源打包的功能(不过HGE的资源文件管理比较弱).把MYGUI的接口接到HGE上就可以实现MYGUI ...
- c#数字图像处理(二)彩色图像灰度化,灰度图像二值化
为加快处理速度,在图像处理算法中,往往需要把彩色图像转换为灰度图像,在灰度图像上得到验证的算法,很容易移植到彩色图像上.24位彩色图像每个像素用3个字节表示,每个字节对应着R.G.B分量的亮度(红.绿 ...