php后端实现分页查询
在搭建自己的博客系统的时候遇到了博客分页问题,刚开始是采用比较笨的方法直接将数据全部取出来存入数组中,后来决定优化一下,利用mysql中的limit实现分页取博客。
mysql的limit用法:
mysql> SELECT * FROM orange LIMIT 5;
如果limit后只有一个参数,则该参数表示从第一条开始取多少条数据,上面代码就表示从数据库第一条开始取5条数据。
当有两个参数时:
SELECT * FROM orange LIMIT 3,2;
上述代码表示从第3+1条数据,即第四条数据开始,取两条数据,即取第4、5条数据。
前端部分我使了jquery,十分方便,后端的话使用了php来从数据库取数据。主要思路就是从前端页面通过jquery的ajax向后端请求数据,并向后端传递当前页数pageNum。后端接收到pageNum后,通过以下核心语句,来实现根据pageNum取数据库不同部分的数据,实现分页查找。(这里假设每页两篇博客)
(pageNum-1)*2的含义是,第pageNum页的内容应该时从(pageNum-1)*2 + 1条数据开始查找,即跳过前面的(pageNum - 1)*2条数据。
$pageNum = ( $pageNum - 1 )*2; $sql = 'select * from blogs limit ' . $pageNum. ',2';
下面是我本地测试的代码:
前端get.html:(有点长,需要判断最后一页,第一页的情况)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<title>mysql分页查询</title>
</head>
<body>
<div class="app">
<button onclick="forward()">前一页</button>
<button onclick="next()">后一页</button>
<div id="result">
</div>
</div>
<script>
var pageNum = 1;
$(document).ready(function () {
query();
})
function forward() {
pageNum--;
query();
}
function next() {
pageNum++;
query();
}
function query() {
if (pageNum <= 0) {
alert('这是第一页!');
pageNum = 1;
return;
}
console.log(pageNum);
$("#result").empty();
$.get("../get.php", {
"pageNum": pageNum
},
function (data, status) {
console.log("Data: " + data + "\nStatus: " + status);
if (data === "NULL") {
pageNum--;
query();
alert('没有更多数据了!');
return;
}
data = $.parseJSON(data);
for (let i in data) {
var s = "<h1>Title: " + data[i].title + "</h1>" + data[i].content;
$("#result").append(s);
}
});
}
</script>
</body>
</html>
后端代码get.php:
<?php
$pageNum = $_GET['pageNum'];
// $conn = new mysqli( $servername, $username, $password, $dbname );
$conn = new mysqli( 'localhost', 'root', 'zy20011109', 'blogs' );
if ( $conn->connect_error ) {
die( '连接失败: ' . $conn->connect_error );
}
$pageNum = ( $pageNum - 1 )*2;
$sql = 'select * from blogs limit ' . $pageNum. ',2';
$result = $conn->query( $sql );
if ( $result->num_rows>0 ) {
$blogs = array();
while( $row = $result->fetch_assoc() ) {
array_push( $blogs, $row );
}
echo json_encode( $blogs, JSON_UNESCAPED_UNICODE );
} else {
echo 'NULL';
}
$conn->close();
?>
还有就是php返回数据格式的问题,我发现php返回的数据是string类型的数据,所以在get.html中使用时需要转换为json类型,就得到了一个json数组,通过遍历此数组,就可以得到相应的数据了。

浙公网安备 33010602011771号