服务热线
1888888888
作者:文煞发布时间:2024-08-16分类:PHP笔记浏览:238
使用PHP搭配mysql数据库,是很多网站最常见的储存数据和读取数据的方法。当我们自己用PHP读取mysql数据库的时候,如果读取的数据过大,展现内容的时候就会出现加载很慢甚至网页崩溃的情况。这时候我们如果对需要展示的内容进行分页处理,可能就会好很多。
分页是一种常见的技术,用于在大量数据中仅显示一部分数据,从而提高网站的性能和用户体验。在PHP中,连接MYSQL数据的方法有PDO和mysqli两种方式,本文通过几个简单的案例代码来介绍PDO和mysqli的分页方式。
<?php // 数据库连接信息 $host = 'localhost'; $db = 'test_db'; $user = 'root'; $pass = ''; $charset = 'utf8mb4'; // 创建PDO连接 $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; $pdo = new PDO($dsn, $user, $pass, $options); // 设置每页显示的记录数 $limit = 10; // 获取当前页码 $page = isset($_GET['page']) ? (int)$_GET['page'] : 1; // 计算偏移量 $offset = ($page - 1) * $limit; // SQL查询语句 $sql = "SELECT * FROM `my_table` LIMIT :limit OFFSET :offset"; // 预准备语句 $stmt = $pdo->prepare($sql); $stmt->bindParam(':limit', $limit, PDO::PARAM_INT); $stmt->bindParam(':offset', $offset, PDO::PARAM_INT); // 执行查询 $stmt->execute(); // 获取分页数据 $rows = $stmt->fetchAll(); // 展示数据 foreach ($rows as $row) { echo $row['id'] . ' ' . $row['name'] . '<br>'; } // 计算总页数 $totalRecords = $pdo->query("SELECT COUNT(*) FROM `my_table`")->fetchColumn(); $totalPages = ceil($totalRecords / $limit); // 显示分页链接(简化示例) echo '<div>Pages: '; for ($i = 1; $i <= $totalPages; $i++) { echo '<a href="?page=' . $i . '">' . $i . '</a> '; } echo '</div>'; ?>
<?php // 数据库连接信息 $host = 'localhost'; $db = 'test_db'; $user = 'root'; $pass = ''; // 连接数据库 $conn = new mysqli($host, $user, $pass, $db); // 检查连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 设置每页显示的记录数 $limit = 10; // 获取当前页码 $page = isset($_GET['page']) ? $_GET['page'] : 1; // 计算偏移量 $offset = ($page - 1) * $limit; // SQL查询语句 $sql = "SELECT * FROM `my_table` LIMIT ? OFFSET ?"; // 准备语句 $stmt = $conn->prepare($sql); // 绑定参数 $stmt->bind_param("ii", $limit, $offset); // 执行查询 $stmt->execute(); // 获取分页数据 $rows = $stmt->get_result()->fetch_all(MYSQLI_ASSOC); // 展示数据 foreach ($rows as $row) { echo $row['id'] . ' ' . $row['name'] . '<br>'; } // 计算总页数(假设每页10条记录,总记录数为$totalRecords) $totalRecords = $conn->query("SELECT COUNT(*) FROM `my_table`")->fetch_row()[0]; $totalPages = ceil($totalRecords / $limit); // 显示分页链接(简化示例) echo '<div>Pages: '; for ($i = 1; $i <= $totalPages; $i++) { echo '<a href="?page=' . $i . '">' . $i . '</a> '; } echo '</div>'; // 关闭语句和连接 $stmt->close(); $conn->close(); ?>
当然,在我们处理分页的同时,可能还伴随着其他条件的筛选,比如分类、标签、时间等等。比如:
$sortField = isset($_GET['sort']) ? $_GET['sort'] : 'id'; $sortOrder = isset($_GET['order']) ? $_GET['order'] : 'ASC';
请注意,上面两段案例代码中都使用了预处理语句和参数绑定来防止SQL注入攻击。以上代只是码展示了如何使用mysqli进行基础的分页查询。接下来,我们还可以使用了预处理语句和参数绑定的同时,加入排序参数等手段。用户可以通过URL传递sort和order参数来控制排序方式。
当我们某一篇文章太长,影响道页面的加载速度和浏览体验的时候,我们可对超过指定长度的文章进行分页。比如我们某一篇文章超过2000字,我们就需要进行分页处理,处理规则是每一页字数不超过2000字。
下面我们通过一个使用PHP和mysqli进行分页显示文章的完整案例代码来进行介绍。这个案例假设你有一个名为articles的数据表,其中包含id和content字段。
<?php // 数据库连接信息 $host = 'localhost'; $db = 'your_database'; $user = 'root'; $pass = ''; // 创建mysqli连接 $conn = new mysqli($host, $user, $pass, $db); // 检查连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 文章ID $articleId = 1; // 假设我们要展示的文章ID是1 // SQL查询语句,获取指定文章内容 $sql = "SELECT `content` FROM `articles` WHERE `id` = ?"; // 准备语句 $stmt = $conn->prepare($sql); // 绑定参数 $stmt->bind_param("i", $articleId); // 执行查询 $stmt->execute(); // 获取文章内容 $row = $stmt->get_result()->fetch_assoc(); // 检查文章内容长度 if (strlen($row['content']) > 2000) { // 文章内容超过2000字,进行分页 $contentParts = explode('<!--nextpage-->', $row['content']); $currentPart = 0; // 初始化分页变量 $currentPage = isset($_GET['page']) ? $_GET['page'] : 1; $partsPerPage = 2; $totalParts = count($contentParts); // 计算当前页应该显示的部分 $startPart = ($currentPage - 1) * $partsPerPage; $endPart = $startPart + $partsPerPage - 1; // 确保部分索引在范围内 $startPart = max(0, $startPart); $endPart = min($totalParts - 1, $endPart); // 显示分页内容 for ($i = $startPart; $i <= $endPart; $i++) { if (isset($contentParts[$i])) { echo "<p>{$contentParts[$i]}</p>"; } } // 显示分页链接 for ($i = 1; $i <= ceil($totalParts / $partsPerPage); $i++) { echo "<a href='?page=" . $i . "'>第 " . $i . " 页</a> "; } } else { // 文章内容不超过2000字,直接显示 echo "<h2>文章标题</h2>"; // 注意:这里假设您有一个方法来获取文章标题,但当前代码只显示了内容 echo "<p>{$row['content']}</p>"; } // 关闭语句和连接 $stmt->close(); $conn->close(); ?>
在这个案例中,我们首先连接到数据库,然后指定要读取的文章ID。我们执行一个SQL查询来获取指定文章的内容。如果文章内容超过2000字,我们使用<!--nextpage-->作为分隔符来分割文章内容,并在每个页面上显示一部分内容。如果文章内容不超过2000字,我们就直接显示整个文章内容。
我们还需要设计一个分页链接,允许用户浏览文章的下一部分。链接的page参数用于获取文章内容的下一部分。
分享:
支付宝
微信