php实现新闻浏览
PHP实现新闻浏览功能
数据库设计
创建新闻表结构,通常包含以下字段:
CREATE TABLE news (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
publish_time DATETIME DEFAULT CURRENT_TIMESTAMP,
author VARCHAR(100),
category VARCHAR(50)
);
连接数据库
使用PDO连接MySQL数据库:
$dbhost = 'localhost';
$dbname = 'news_db';
$dbuser = 'root';
$dbpass = '';
try {
$pdo = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
die("数据库连接失败: " . $e->getMessage());
}
新闻列表展示
查询并显示新闻列表:

$stmt = $pdo->query("SELECT id, title, publish_time FROM news ORDER BY publish_time DESC");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo '<div class="news-item">';
echo '<h3><a href="news_detail.php?id='.$row['id'].'">'.$row['title'].'</a></h3>';
echo '<p>发布时间: '.$row['publish_time'].'</p>';
echo '</div>';
}
新闻详情页
显示单篇新闻内容:
if(isset($_GET['id'])) {
$id = $_GET['id'];
$stmt = $pdo->prepare("SELECT * FROM news WHERE id = ?");
$stmt->execute([$id]);
$news = $stmt->fetch(PDO::FETCH_ASSOC);
if($news) {
echo '<h1>'.$news['title'].'</h1>';
echo '<p>作者: '.$news['author'].' | 分类: '.$news['category'].'</p>';
echo '<div class="news-content">'.$news['content'].'</div>';
} else {
echo '新闻不存在';
}
}
分页功能
实现新闻列表分页:

$perPage = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $perPage;
$total = $pdo->query("SELECT COUNT(*) FROM news")->fetchColumn();
$totalPages = ceil($total / $perPage);
$stmt = $pdo->prepare("SELECT id, title FROM news ORDER BY publish_time DESC LIMIT :offset, :perPage");
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->bindParam(':perPage', $perPage, PDO::PARAM_INT);
$stmt->execute();
// 显示分页导航
for ($i = 1; $i <= $totalPages; $i++) {
echo '<a href="?page='.$i.'"'.($page==$i?' class="current"':'').'>'.$i.'</a>';
}
安全防护
防止SQL注入和XSS攻击:
// 使用预处理语句防止SQL注入
$stmt = $pdo->prepare("SELECT * FROM news WHERE id = ?");
$stmt->execute([$id]);
// 输出内容时进行HTML转义防止XSS
echo htmlspecialchars($news['content'], ENT_QUOTES, 'UTF-8');
性能优化
添加缓存和索引:
-- 为常用查询字段添加索引
ALTER TABLE news ADD INDEX idx_publish_time (publish_time);
ALTER TABLE news ADD INDEX idx_category (category);
-- 使用缓存
$cacheKey = 'news_list_page_'.$page;
if(!$news = $cache->get($cacheKey)) {
$news = $pdo->query("SELECT ...")->fetchAll();
$cache->set($cacheKey, $news, 3600); // 缓存1小时
}
以上实现方案包含了新闻系统的基本功能,可根据实际需求进行扩展和优化。






