以MySQL数据库为例,如果要从表内截取某段内容,sql语句可以用:select * from table limit offset, rows。看看下面一组sql语句,尝试一下发现其中的规率。
前10条记录:select * from table limit 0,10
第11至20条记录:select * from table limit 10,10
第21至30条记录:select * from table limit 20,10
……
这一组sql语句其实就是当PageSize=10的时候取表内每一页数据的sql语句,我们可以总结出这样一个模板:select * from table limit (CurrentPageID - 1) * $PageSize, $PageSize
<?php
// 数据库连接常量
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PWD', '');
define('DB_NAME', 'guest');
// 连接数据库
function conn()
{
$conn = mysqli_connect(DB_HOST, DB_USER, DB_PWD, DB_NAME);
mysqli_query($conn, "set names utf8");
return $conn;
}
//获得结果集
function doresult($sql){
$result=mysqli_query(conn(), $sql);
return $result;
}
//结果集转为对象集合
function dolists($result){
return mysqli_fetch_array($result, MYSQL_ASSOC);
}
function totalnums($sql) {
$result=mysqli_query(conn(), $sql);
return $result->num_rows;
}
// 关闭数据库
function closedb()
{
if (! mysqli_close()) {
exit('关闭异常');
}
}
?>
分页实现代码:
<?php
include 'mysqli.func.php';
// 总记录数
$sql = "SELECT dg_id FROM tb_user ";
$totalnums = totalnums($sql);
// 每页显示条数
$fnum = 8;
// 翻页数
$pagenum = ceil($totalnums / $fnum);
// 页数常量
$tmp = $_GET['page'];
$page = isset($_GET['page'])?$_GET['page']:1;
//分页
$shangye = ($page==1)?0:($page - 1);//上一页
$n = ($page == $fenye_qzheng) ? 0 : ($page + 1);//下一页
//计算分页起始值
if ($tmp == "") {
$num = 0;
} else {
$num = ($tmp - 1) * $fnum;
}
// 查询语句
$sql = "SELECT dg_id,dg_username FROM tb_user ORDER BY dg_id DESC LIMIT " . $num . ",$fnum";
$result = doresult($sql);
// 遍历输出
while ( ! $rows = dolists($result)) {
echo $rows['dg_id'] . " " . $rows['dg_username'] . "<br>";
}
// 翻页链接
for ($i = 0; $i < $pagenum; $i ++) {
echo "<a href=index.php?page=" . ($i + 1) . ">" . ($i + 1) . "</a>";
}
?>