如何用PDO查询MySQL指定行,实现点击链接跳转至对应文章详情页
实现单篇博客文章详情页步骤
1. 修改文章列表页的跳转链接
首先要给列表页里文章标题的跳转链接加上对应文章的唯一标识(比如表中的id字段),让详情页能识别要加载的目标文章:
<?php foreach ($posts as $post) { ?> <div class="blog-post"> <!-- 给链接添加?id=文章ID的参数 --> <a href="single-post.php?id=<?php echo $post['id']; ?>"> <h2 class="blog-post-title"><?php echo $post['title']; ?></h2> </a> <p class="blog-post-meta"><?php echo $post['created_at']; ?> by <a href="#"><?php echo $post['author']; ?></a></p> <p><?php echo $post['body']; ?></p> </div> <?php } ?>
2. 编写single-post.php的代码
在详情页中,先获取URL里的id参数,再从数据库查询对应ID的文章,最后渲染内容:
<?php // 假设已通过PDO建立数据库连接$connection if (isset($_GET['id']) && is_numeric($_GET['id'])) { $postId = $_GET['id']; // 用预处理语句避免SQL注入 $sql = "SELECT * FROM posts WHERE id = :id"; $statement = $connection->prepare($sql); $statement->bindParam(':id', $postId, PDO::PARAM_INT); $statement->execute(); $statement->setFetchMode(PDO::FETCH_ASSOC); $post = $statement->fetch(); if ($post) { // 渲染单篇文章内容 ?> <div class="blog-post"> <h2 class="blog-post-title"><?php echo $post['title']; ?></h2> <p class="blog-post-meta"><?php echo $post['created_at']; ?> by <a href="#"><?php echo $post['author']; ?></a></p> <div class="blog-post-content"><?php echo $post['body']; ?></div> </div> <?php } else { // 文章不存在时的提示 echo "<p>抱歉,未找到该文章</p>"; } } else { // 参数不合法时的提示 echo "<p>请求参数无效</p>"; } ?>
核心注意点
- 用
is_numeric()验证id参数,确保是合法数字,过滤非法请求 - 采用PDO参数绑定的预处理语句,彻底避免SQL注入风险
- 增加异常场景处理,提升页面的健壮性
内容的提问来源于stack exchange,提问作者qouillyan
相关产品推荐
相关产品推荐

