环境准备
确保已安装以下组件:
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(50)
);
INSERT INTO users (name, email) VALUES
('张三', 'zhangsan@example.com'),
('李四', 'lisi@example.com');
PHP连接数据库并查询数据
<?php $host = 'localhost'; $user = 'root'; $password = '密码'; $db = 'test_db'; // 创建PDO连接 $conn = new PDO("mysql:host=$host;dbname=$db", $user, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 执行SQL查询 $stmt = $conn->query('SELECT FROM users'); $data = $stmt->fetchAll(PDO::FETCH_ASSOC); ?>
HTML显示数据
将数据渲染为HTML表格
<!DOCTYPE html> <html> <head>数据库数据展示</title> <style> table { width: 50%; border-collapse: collapse; } th, td { border: 1px solid #ccc; padding: 8px; text-align: left; } th { background-color: #f4f4f4; } </style> </head> <body> <h2>用户列表</h2> <table> <tr> <th>ID</th> <th>姓名</th> <th>邮箱</th> </tr> <!-循环输出数据 --> <?php foreach ($data as $row): ?> <tr> <td><?= htmlspecialchars($row['id']) ?></td> <td><?= htmlspecialchars($row['name']) ?></td> <td><?= htmlspecialchars($row['email']) ?></td> </tr> <?php endforeach; ?> </table> </body> </html>
分页功能实现(可选)
添加分页逻辑
<?php // 每页显示条数 $limit = 5; // 获取当前页码(默认为1) $page = isset($_GET['page']) ? (int)$_GET['page'] : 1; // 计算偏移量 $offset = ($page 1) $limit; // 分页查询 $stmt = $conn->prepare('SELECT FROM users LIMIT :limit OFFSET :offset'); $stmt->bindParam(':limit', $limit, PDO::PARAM_INT); $stmt->bindParam(':offset', $offset, PDO::PARAM_INT); $stmt->execute(); $data = $stmt->fetchAll(PDO::FETCH_ASSOC); // 获取总记录数 $total = $conn->query('SELECT COUNT() FROM users')->fetchColumn(); $totalPages = ceil($total / $limit); ?>
添加分页导航链接
<div> <?php if ($page > 1): ?> <a href="?page=<?= $page-1 ?>">上一页</a> <?php endif; ?> <!-显示页码范围 --> <?php for ($i=1; $i<=$totalPages; $i++): ?> <?php if ($i === $page): ?> <strong><?= $i ?></strong> <?php else: ?> <a href="?page=<?= $i ?>"><?= $i ?></a> <?php endif; ?> <?php endfor; ?> <?php if ($page < $totalPages): ?> <a href="?page=<?= $page+1 ?>">下一页</a> <?php endif; ?> </div>
样式美化(可选)
使用Bootstrap框架快速美化表格:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css"> <table class="table table-striped table-hover">...</table>
相关问题与解答
问题1:如何选择PDO或mysqli?
解答:
- PDO:支持多种数据库(如MySQL、PostgreSQL、SQLite),语法统一,推荐新项目使用。
- mysqli:仅支持MySQL,性能略优,适合仅需操作MySQL的场景。
问题2:为什么查询结果需要htmlspecialchars
处理?
解答:
防止XSS攻击,若数据库中存储了<script>alert('hack')</script>
,直接输出会执行JS代码,而htmlspecialchars
会将其转义为`<script>