You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据ID显示指定文章?PHP文章页面关联查询问题修复

文章详情页显示异常的修复方案

问题现象

  • 点击右侧栏文章链接(如“What are SMTP, IMAP etc”)时,article.php页面未展示对应ID的文章,反而输出所有文章内容
  • 尝试在SQL语句中添加固定条件WHERE article_id=1后,所有链接跳转后均显示同一篇文章

修复步骤

优化article.php的查询逻辑

核心思路是根据URL传递的articleID参数,精准查询对应文章,同时通过参数化查询避免安全风险,修改后的代码如下:

<div class="article-info">
  <?php
// 先校验URL参数是否存在
if(isset($_GET["articleID"])) {
    $article_id = $_GET["articleID"];
    // 使用参数化预处理语句,避免SQL注入,同时精准查询目标文章
    $sql = "SELECT * FROM articles INNER JOIN users ON articles.author = users.user_name WHERE articles.article_id = ?";
    $stmt = $conn->prepare($sql);
    // 绑定整数类型参数(i代表integer)
    $stmt->bind_param("i", $article_id);
    $stmt->execute();
    $result = $stmt->get_result();

    if($result->num_rows > 0) {
        $row = $result->fetch_assoc();
        // 直接输出目标文章内容
        echo '<h2>'.$row["title"].'</h2>';
        echo '<p>Created '.$row["publish_date"].' || By '.$row["first_name"].' '.$row["last_name"].' ('.$row["role"].')</p>';
        echo $row["text"];
    } else {
        echo "<p>抱歉,该文章不存在或已被删除</p>";
    }
    // 关闭预处理语句
    $stmt->close();
} else {
    echo "<p>请选择要查看的文章</p>";
}
?>
</div>

关键修改点说明

  • 精准查询:不再查询所有文章,而是通过WHERE articles.article_id = ?只获取对应ID的文章,解决了显示全部文章的问题
  • 参数化查询:使用预处理语句绑定参数,避免直接拼接SQL带来的SQL注入风险,同时适配任意合法的文章ID,不用硬编码判断条件
  • 参数校验:增加了articleID参数的存在性判断,以及文章不存在时的提示,提升页面健壮性和用户体验

原代码问题复盘

  1. 原SQL查询了所有文章数据,再通过循环判断ID输出,逻辑冗余且性能低下
  2. 硬编码id == 1、id == 2的判断条件,无法适配更多文章ID,扩展性极差
  3. 未做SQL注入防护,存在数据安全隐患

内容的提问来源于stack exchange,提问作者pistachio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 08:13:33