PHP如何显示数据库表格内容:从连接到展示的完整指南
在Web开发中,将数据库中的表格内容动态展示到页面上是一项核心技能,PHP作为最流行的服务器端脚本语言之一,凭借其与MySQL等数据库的深度集成能力,能轻松实现数据查询与展示,本文将详细介绍如何使用PHP连接数据库、查询数据,并通过多种方式将表格内容安全、高效地显示在网页上。
准备工作:环境与数据库表结构
在开始编写PHP代码前,需确保本地开发环境已配置好PHP + MySQL(或MariaDB)+ Web服务器(如Apache/Nginx),若未配置,可使用集成环境包(如XAMPP、WampServer)快速搭建。
假设我们有一个名为test_db的数据库,其中包含一张users表,结构如下:
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`email` varchar(100) NOT NULL,
`age` int(3) DEFAULT NULL,
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 插入测试数据
INSERT INTO `users` (`name`, `email`, `age`) VALUES
('张三', 'zhangsan@example.com', 25),
('李四', 'lisi@example.com', 30),
('王五', 'wangwu@example.com', 28);
核心步骤:连接数据库并查询数据
连接MySQL数据库
PHP提供了多种扩展连接MySQL数据库,推荐使用PDO(PHP Data Objects),它支持多种数据库(MySQL、PostgreSQL等),且具有预处理语句功能,能有效防止SQL注入。
<?php
$host = 'localhost'; // 数据库主机地址
$dbname = 'test_db'; // 数据库名
$username = 'root'; // 数据库用户名
$password = ''; // 数据库密码(XAMPP默认为空)
try {
// 创建PDO实例,连接数据库
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
// 设置PDO错误模式为异常
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
// 连接失败时输出错误信息(生产环境中应记录日志,而非直接显示错误)
die("数据库连接失败: " . $e->getMessage());
}
?>
查询表格数据
使用PDO的query()方法执行SQL查询,并通过fetchAll()获取结果集(关联数组形式,便于字段名访问)。
<?php // 查询users表的所有数据 $sql = "SELECT id, name, email, age FROM users ORDER BY id ASC"; $stmt = $pdo->query($sql); // 获取所有结果(PDO::FETCH_ASSOC表示返回关联数组) $users = $stmt->fetchAll(PDO::FETCH_ASSOC); ?>
显示数据:基础表格展示
获取数据后,可通过HTML表格标签将内容展示在页面上,以下是一个完整的示例(display_table.php):
<?php
require_once 'db_connection.php'; // 引入数据库连接文件(包含上述连接代码)
// 查询数据
$sql = "SELECT id, name, email, age FROM users";
$stmt = $pdo->query($sql);
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">用户列表</title>
<style>
table { width: 80%; margin: 20px auto; border-collapse: collapse; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
tr:nth-child(even) { background-color: #f9f9f9; }
</style>
</head>
<body>
<h1 style="text-align: center;">用户信息表</h1>
<table>
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>邮箱</th>
<th>年龄</th>
</tr>
</thead>
<tbody>
<?php if (!empty($users)): ?>
<?php foreach ($users as $user): ?>
<tr>
<td><?= htmlspecialchars($user['id']) ?></td>
<td><?= htmlspecialchars($user['name']) ?></td>
<td><?= htmlspecialchars($user['email']) ?></td>
<td><?= htmlspecialchars($user['age']) ?></td>
</tr>
<?php endforeach; ?>
<?php else: ?>
<tr>
<td colspan="4" style="text-align: center;">暂无数据</td>
</tr>
<?php endif; ?>
</tbody>
</table>
</body>
</html>
关键点说明:
htmlspecialchars()函数:将特殊字符(如<、>、&)转换为HTML实体,防止XSS(跨站脚本攻击)攻击。- 空数据判断:通过
if (!empty($users))判断查询结果是否为空,避免foreach循环报错。 - CSS样式:简单的表格样式提升可读性(可根据需求调整)。
优化与扩展:分页、搜索与安全增强
分页显示(处理大量数据)
当表格数据量较大时,一次性加载所有数据会导致页面卡顿,需通过分页(Pagination)优化,以下是核心实现:
<?php
require_once 'db_connection.php';
// 分页参数
$page = isset($_GET['page']) ? max(1, (int)$_GET['page']) : 1; // 当前页码,最小为1
perPage = 10; // 每页显示条数
offset = ($page - 1) * $perPage; // 计算偏移量
// 查询总记录数(用于计算总页数)
$totalStmt = $pdo->query("SELECT COUNT(*) FROM users");
$totalRecords = $totalStmt->fetchColumn();
$totalPages = ceil($totalRecords / $perPage);
// 查询当前页数据
$sql = "SELECT id, name, email, age FROM users LIMIT :limit OFFSET :offset";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':limit', $perPage, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">分页用户列表</title>
<style>
table { width: 80%; margin: 20px auto; border-collapse: collapse; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
.pagination { text-align: center; margin: 20px; }
.pagination a, .pagination span {
display: inline-block; padding: 5px 10px; margin: 0 2px;
border: 1px solid #ddd; text-decoration: none;
}
.pagination .current { background-color: #f2f2f2; font-weight: bold; }
</style>
</head>
<body>
<h1 style="text-align: center;">用户信息表(分页)</h1>
<table>
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>邮箱</th>
<th>年龄</th>
</tr>
</thead>
<tbody>
<?php foreach ($users as $user): ?>
<tr>
<td><?= htmlspecialchars($user['id']) ?></td>
<td><?= htmlspecialchars($user['name']) ?></td>
<td><?= htmlspecialchars($user['email']) ?></td>
<td><?= htmlspecialchars($user['age']) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<!-- 分页导航 -->
<div class="pagination">
<?php if ($page > 1): ?>
<a href="?page=1">首页</a>
<a href="?page=<?= $page - 1 ?>">上一页</a>
<?php endif; ?>
<?php for ($i = 1; $i <= $totalPages; $i++): ?>
<?php if ($i == $page): ?>
<span class="current"><?= $i ?></span>
<?php else: ?>
<a href="?page=<?= $i ?>"><?= $i ?></a>
<?php endif; ?>
<?php endfor; ?>
<?php if ($page < $totalPages): ?>


还没有评论,来说两句吧...