PHP操作数据分页

一、数据库安全

string addslashes ( string $str )
返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)。 一个使用 addslashes() 的例子是当你要往数据库中输入数据时。例如,将名字 O'reilly 插入到数据库中,这就需要对其进行转义。大多数据库使用 \ 作为转义符:O\'reilly。这样可以将数据放入数据库中,而不会插入额外的 \。当 PHP 指令 magic_quotes_sybase 被设置成 on 时,意味着插入 ' 时将使用 ' 进行转义。 默认情况下,PHP 指令 magic_quotes_gpc 为 on,它主要是对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。

二、分页

首先说一下分页的核心思想:首先当前页,页面大小,总记录数。这个三个数值可以通过总记录数和页面大小,我们就可以计算出总的页数。

# 1、连接MySQL服务器
$link = @mysqli_connect('localhost','root','123456','school'); if(!$link){
$logs = date('Y-m-d H:i:s');
$logs .= ' mysql错误编码:'.mysqli_connect_errno().'错误信息:'.mysqli_connect_error();
file_put_contents('mysql_error.log',$logs . PHP_EOL,FILE_APPEND);
exit('亲 MySQL连接失败!');
} # 2、设置字符集
if( !mysqli_set_charset($link,'utf8') ){
$logs = date('Y-m-d H:i:s');
$logs .= ' mysql错误编码:'.mysqli_errno($link).'错误信息:'.mysqli_error($link);
file_put_contents('mysql_error.log',$logs . PHP_EOL,FILE_APPEND);
}

1、总记录数

// 获取总的记录数
$sql_total_records = "select count(*) from innodb_table_stats";
$total_records_result = mysqli_query($link,$sql_total_records);
$total_records = mysqli_fetch_row($total_records_result);
echo "总的记录数位: ".$total_records[0]."<br>";

2、当前页

# 通过GET方式获取客户端访问的页码
$current_page = isset($_GET['page_number']) ?$_GET['page_number'] : 1; if( $current_page < 1 ){
$current_page = 1;
}
if( $current_page > $total_pages ){
$current_page = $total_pages
}

3、分页核心

$begin_position = ($current_page_number-1) * $page_size;
$sql = "select * from tb_user limit $begin_position,$page_size";
$result = mysqli_query($link,$sql);

4、页面展示

echo '<a href="index.php?page_number=1">首页</a>&nbsp;&nbsp;';
for($i=1;$i<=$total_pages;$i++){
echo '<a href="./index.php?page_number='.$i.'">第'.$i.'页</a>&nbsp;&nbsp;';
}
echo '<a href="index.php?page_number='.($current_page_number-1).'">上一页</a>&nbsp;&nbsp;';
echo '<a href="index.php?page_number='.($current_page_number+1).'">下一页</a>&nbsp;&nbsp;';
echo '<a href="index.php?page_number='.($total_pages).'">尾页</a>&nbsp;&nbsp;';

贡献代码

header('content-type:text/html;charset=utf-8');

# 1、连接MySQL服务器
$link = @mysqli_connect('localhost','root','123456','school'); if(!$link){
$logs = date('Y-m-d H:i:s');
$logs .= ' mysql错误编码:'.mysqli_connect_errno().'错误信息:'.mysqli_connect_error();
file_put_contents('mysql_error.log',$logs . PHP_EOL,FILE_APPEND);
exit('亲 MySQL连接失败!');
} # 2、设置字符集
if( !mysqli_set_charset($link,'utf8') ){
$logs = date('Y-m-d H:i:s');
$logs .= ' mysql错误编码:'.mysqli_errno($link).'错误信息:'.mysqli_error($link);
file_put_contents('mysql_error.log',$logs . PHP_EOL,FILE_APPEND);
}
//--------------------------------------------------------------------------
# 获取总记录数
$t_sql = "select count(*) as t from student";
$res = mysqli_query($link,$t_sql);
$row = mysqli_fetch_assoc($res);
$total = $row['t']; # 每页显示多少记录
$pageRows = 2; # 获取总页数
$tPage = ceil($total/$pageRows); # 根据当前页码 来生成查询用的SQL
if(isset($_GET['p']) && intval($_GET['p'])){
$page = $_GET['p'] > $tPage ? $tPage : $_GET['p'];
}else{
$page = 1;
} $start = ($page-1)*$pageRows;
$sql = "select * from student limit $start,$pageRows"; //------------------------------------------------------------------ # 4、执行SQL $result 查询出来的结果集
$result = mysqli_query($link,$sql); echo '<table border="1" width="600" align="center">';
while($rows = mysqli_fetch_assoc($result)){
echo '<tr>
<td>'.$rows['sno'].'</td>
<td>'.$rows['sname'].'</td>
<td>'.$rows['ssex'].'</td>
<td>'.$rows['sbirthday'].'</td>
<td>'.$rows['class'].'</td>
</tr>';
}
echo '</table>'; # 5、收功
mysqli_free_result($result); # 6、关闭数据库连接
mysqli_close($link); ?>
<style>
a {
border:1px solid red;
padding:2px;
margin-right:3px;
text-decoration:none;
}
</style>
<div style="width:500px;margin:20px auto;">
<?php
echo "<a href='page.php?p=1'>首页</a>";
echo "<a href='page.php?p=".($page-1)."'>上一页</a>";
for($i=1;$i<=$tPage;$i++){
echo "<a href='page.php?p=$i'>$i</a>";
}
echo "<a href='page.php?p=".($page+1)."'>下一页</a>";
echo "<a href='page.php?p=$tPage'>尾页</a>";
?>
</div>

PHP操作数据分页的更多相关文章

  1. 腾讯云图片鉴黄集成到C# SQL Server 怎么在分页获取数据的同时获取到总记录数 sqlserver 操作数据表语句模板 .NET MVC后台发送post请求 百度api查询多个地址的经纬度的问题 try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后? js获取某个日期

    腾讯云图片鉴黄集成到C#   官方文档:https://cloud.tencent.com/document/product/641/12422 请求官方API及签名的生成代码如下: public c ...

  2. jQuery异步分页插件

    学校软件工程让写课程设计(其实就是自选语言做个项目),感觉都是重复的东西就没有很认真的去写内容,更加注意写一些之前没有用过的东西. 因为一直都使用TP框架来写PHP,TP又自带分页类,想到这里就想试试 ...

  3. Python Django的分页,Form验证,中间件

    本节内容 Django的分页 Form 中间件 1 Django 分页 1.1 Django自带的分页 1.首先来看下我的测试数据环境 ############ models.py ######### ...

  4. el-table复选框分页记忆

    el-table 结合 el-pagination 实现分页后默认是没有复选框记忆功能的,对于这样的需求,无奈又只能硬着头皮上,试了网上的一些方法,没奏效,便自己上了. 简单的用法如下: <te ...

  5. Solr中使用游标进行深度分页查询以提高效率(适用的场景下)

    通常,我们的应用系统,如果要做一次全量数据的读取,大多数时候,采用的方式会是使用分页读取的方式,然而 分页读取的方式,在大数据量的情况下,在solr里面表现并不是特别好,因为它随时可能会发生OOM的异 ...

  6. YII2中分页组件的使用

    当数据过多,无法一页显示时,我们经常会用到分页组件,YII2中已经帮我们封装好了分页组件. 首先我们创建操作数据表的AR模型: <?php namespace app\models; use y ...

  7. EF批量操作数据与缓存扩展框架

    前言 在原生的EF框架中,针对批量数据操作的接口有限,EF扩展框架弥补了EF在批量操作时的接口,这些批量操作包括:批量修改.批量查询.批量删除和数据缓存,如果您想在EF中更方便的批量操作数据,这个扩展 ...

  8. 数据库分库分表和带来的唯一ID、分页查询问题的解决

    需求缘起(用一个公司的发展作为背景) 1.还是个小公司的时候,注册用户就20w,每天活跃用户1w,每天最大单表数据量就1000,然后高峰期每秒并发请求最多就10,此时一个16核32G的服务器,每秒请求 ...

  9. 【MyBatis】MyBatis分页插件PageHelper的使用

    好多天没写博客了,因为最近在实习,大部分时间在熟悉实习相关的东西,也没有怎么学习新的东西,这周末学习了MyBatis的一个分页插件PageHelper,虽然没有那么的强大(我在最后会说明它的缺点),但 ...

  10. AngularJS入门 & 分页 & CRUD示例

    一.AngularJS 简介 ​ AngularJS  诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款产品当中. ...

随机推荐

  1. CH#17C 舞动的夜晚(最大流+强连通分量)

    舞动的夜晚 CH Round #17 描述 L公司和H公司举办了一次联谊晚会.晚会上,L公司的N位员工和H公司的M位员工打算进行一场交际舞.在这些领导中,一些L公司的员工和H公司的员工之间是互相认识的 ...

  2. 2017年第八届 蓝桥杯B组C/C++决赛题目

    部分题目示意图来自网络,所以会带水印 最后编辑时间: 2021年5月12日 统一声明 如果不写默认带有常用头文件 如果不表明主函数默认表示在 void solve(){} 默认使用 using nam ...

  3. vue3引入使用svg图标

    vue3使用svg图标 安装 // 通过命令安装2个插件 npm i vite-plugin-svg-icons -D npm i fast-glob -D 在vue.config.js中配置 //v ...

  4. poj 3246 简单线段树

    线段树还真有点难写... #include <iostream> #include <cstdio> #include <cstring> #include < ...

  5. Linux 系统安全加固经验总结

    本文为博主原创,转载请注明出处: 目录  1. 禁止root密码登录 2. linux 用户密钥复杂度及有效期设置 3. 检查sudo权限 4.关闭ftp 5.设置文件的属主并指定读写执行权限 6.管 ...

  6. spring启动流程 (4) FactoryBean详解

    FactoryBean接口 实现类对象将被用作创建Bean实例的工厂,即调用getObject()方法返回的对象才是真正要使用的Bean实例,而不是直接将FactoryBean对象作为暴露的Bean实 ...

  7. 06-verilog基础语法_5

    How to build and test a module parameter defparam修改参数 Task & function Task Function function不可以调 ...

  8. 海思Hi35xx 通过uboot 读取U盘文件进行固件升级

    前言 基本过程为:uboot 启动后,通过命令将U盘的的文件读取到内存中,再通过uboot 的flash 写入命令将读取到内存中的升级文件写入到flash的固定位置. (一)usb常用命令 uboot ...

  9. 凡是有但是-varchar和nvarchar的初步学习之一

    凡是有但是-varchar和nvarchar的初步学习之一 背景 高应用开发, 在涉及到国内国外的问题时,重要的事情有两个: 时区转换, 字符集转换. 时区转换虽然是很难理清楚, 各种规范不统一的事情 ...

  10. [转帖]OpenSSL版本历史

    OpenSSL版本历史 新闻日志 这是所有 OpenSSL 公告的简洁日志.它们几乎是发布通知. 日期物品 2021 年 7 月 29 日OpenSSL 3.0 的 Beta 2 现已推出.这是一个候 ...