PHP接口实战教程——PHP+Mysql+ajax实现分页查询接口

PHP基础知识——PHP学习笔记(一)
PHP表单处理——PHP学习笔记(二)
PHP进阶知识——PHP学习笔记(三)
PHP数据库——PHP学习笔记(四)
PHP接口实战教程——PHP+Mysql+ajax实现分页查询接口

知识预备

Mysql知识

分页的本质就是在查询记录中选择I-J条记录

limit M offset N
limit N,M

M pageSize 页面上每页展示的格式
N pageSize*(pageIndex-1)
当offset的N超过数据集的总量,会返回一个空的数据集

大量数据查询
随着N值越来越大,查询的效率越来越低
解决方法:
1.科学的建立索引
2.查询步骤一分为二

php操作数据库

详细点击这里

原生ajax操作

1.new一个request实例
2.http请求状态变化
3.发送请求

//new一个request实例
var request = new XMLHttpRequest();
//http请求状态变化
request.onreadystatechange = function() {
	//解析已经完成
	if(request.readyState === 4) {
	//服务器状态码
		if(request.status !== 200) {
			console.log(request.responseText);
		} else {
			console.log(request.responseText);
	 	}
	}
}
//发送请求
request.open('GET', "test.php");
//request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.send();

后端接口开发

数据准备

用excel生成一个含用户名(从uer001-uer200),密码(随机6位数),年龄(10-60岁),性别的表,将其转换为csv保存(文件-另存为-选择csv(逗号分隔))。若存在中文则将csv用记事本打开,另存为,选择编码格式为UTF-8。

在这里插入图片描述
在这里插入图片描述
打开phpmyadmin建立名为MyDB的数据库以及名为user的数据表(id主键,password,age,sex)
导入整个csv

接口数据结构设置

url:http://127.0.0.1/phpmysql/php/app.php
method:GET
requst:

参数名 必选 类型 说明
pageSize int 每页展示的数据量,默认为10
pageIndex int 第几页的数据

response

{
	"code": 0,
	"message": "Success",
	"info": {
		"count": "200",
		"totalPage": 20,
		"data": [{
			"id": "user001",
			"password": "997320",
			"age": 27,
			"sex": "女"
		}]
	}
}
code说明
0查询成功
1数据库连接失败
2未传入pageIndex
3未传入任何数据

接口类设置

1.类名:app
2.成员变量:$conn
3.成员函数:

函数名 作用
__construct 构造函数,连接数据库
run 接口运行函数
pagination 查询操作
getCount 计算数据总量
returnSuccessData 返回正确的结果
returnData 返回所有的结果

后端代码

<?php
    class app{
        private $conn;
        /**
         * app constructor.
         */
            public function __construct()
        {
            // 创建连接
            $this->conn = new mysqli("localhost", "root", "","mydb");
            //防止中文乱码
            $this->conn->query("SET NAMES UTF8");
            //返回数据库连接错误
            if ($this->conn->connect_error) {
                return $this->returnData(1,$this->conn->connect_error);
            }
        }

        /**
         * 接口运行
         * @return false|string
         */
        public function run(){
            if(is_array($_GET)&&count($_GET)>0)//先判断是否通过get传值了
            {
                if(isset($_GET["pageIndex"]))//是否存在"pageIndex"的参数
                {
                    $pageSize=$_GET['pageSize'] ?? 10;//设置默认值为10
                    $pageIndex=$_GET['pageIndex'];
                    $data=$this->pagination($pageSize,$pageIndex);//调用分页函数
                    $count=$this->getCount();//调用计算总数的函数
                    $totalPage=ceil($count/$pageSize);//计算总页数
                    $info=[
                        'count'=>$count,
                        'totalPage'=>$totalPage,
                        'data'=>$data,
                    ];//数据装入
                    return $this->returnSuccessData($info);//返回正确结果
                }else{
                    return $this->returnData(2,'未传入pageIndex');
                }
            }else{
                return $this->returnData(3,'未传入任何值');
            }
        }

        /**
         * 查询操作
         * @param $pageSize
         * @param $pageIndex
         * @return array
         */
        private function pagination($pageSize, $pageIndex){
            $result=[];
            //防sql注入
            $stmt=$this->conn->prepare("SELECT * FROM `user` LIMIT ? OFFSET ?");
            $page=$pageSize*($pageIndex-1);
            $stmt->bind_param("ii", $pageSize, $page);
            $stmt->execute();
            $data = $stmt->get_result();
            //将获取的结果装入数组
            while ($row = $data->fetch_assoc()){
                array_push($result,$row);
            }
            return $result;
        }

        /**
         * 得到总条数
         * @return mixed
         */
        private function getCount(){
            $result=$this->conn->query("SELECT count(id) id FROM `user`");
            $row = $result->fetch_assoc();
            return $row['id'];
        }
        /**
         * 返回正确的结果数据
         * @param $data
         * @return false|string
         */
        private function returnSuccessData($data){
            $content=[
                'code'=>0,
                'message'=>'Success',
                'info'=>$data,
            ];
            $this->conn->close();
            return json_encode($content);
        }

        /**
         *返回一个通用的结果
         * @param $code
         * @param $message
         * @param array $data
         * @return false|string
         */
        private function returnData($code,$message,$data=[]){
            $content=[
                'code'=>$code,
                'message'=>$message,
                'info'=>$data,
            ];
            $this->conn->close();
            return json_encode($content);
        }
    }
    $app=new app();
    $re=$app->run();
    echo $re;
?>
发布了20 篇原创文章 · 获赞 25 · 访问量 7462

猜你喜欢

转载自blog.csdn.net/qq_41866776/article/details/91344777