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): ?>抖音足球直播
抖音足球直播
企鹅直播
企鹅直播
足球直播
爱奇艺直播
爱奇艺足球直播
足球直播
足球直播
iqiyi直播
足球直播
足球直播
QQ足球直播
QQ足球直播
足球直播
足球直播
QQ足球直播
QQ足球直播
足球直播
足球直播
快连
快连
快连
快连下载
快连
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
新浪足球直播
新浪足球直播
足球直播
足球直播
有道翻译
有道翻译
有道翻译
有道翻译
wps
wps
wps
wps
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
新浪足球直播
新浪足球直播
足球直播
足球直播



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