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

如何补全博客article.php模板的PHP代码以显示单篇文章内容(无循环)

解决单篇文章内容显示的PHP代码补全方案

嘿,我来帮你搞定这个问题!首先你现有代码里有几个关键问题需要修正,然后再补全文章内容的显示逻辑:

原代码的问题点

  • SQL注入风险+语法错误:你直接把$numeroArticle拼进了SQL语句里,还手动加了单引号,这既容易导致语法错误,又会让你的代码暴露在SQL注入攻击下。PDO的prepare语句就是用来解决这个问题的,应该用参数占位符来替代直接拼接变量。
  • 缺少查询执行步骤:你只准备了SQL语句,但没有调用execute()来执行查询,直接fetch()是拿不到数据的。

修正并补全后的完整代码

<?php
try {
    $bdd = new PDO('mysql:host=localhost;dbname=devoir-nabila;charset=utf8', 'root', '');
} catch(Exception $e) {
    die('Erreur : '.$e->getMessage());
}

// 先做参数校验,避免空值或非法值
$numeroArticle = isset($_GET['numero-article']) ? (int)$_GET['numero-article'] : 0;

// 使用PDO参数绑定,避免SQL注入
$req = $bdd->prepare("SELECT * FROM articles WHERE id = :id");
// 绑定参数并执行查询
$req->execute([':id' => $numeroArticle]);
// 获取单条数据(因为是单篇文章,无需循环)
$donnees = $req->fetch(PDO::FETCH_ASSOC);

// 检查是否获取到文章数据
if ($donnees) {
    // 这里根据你的articles表字段来调整,比如假设字段有title、content、created_at
    ?>
    <article>
        <h1><?php echo htmlspecialchars($donnees['title']); ?></h1>
        <p class="date">发布于:<?php echo date('Y-m-d H:i', strtotime($donnees['created_at'])); ?></p>
        <div class="content">
            <?php echo nl2br(htmlspecialchars($donnees['content'])); ?>
        </div>
    </article>
    <?php
} else {
    // 如果没有找到对应文章,显示提示
    echo "<p>抱歉,未找到该文章!</p>";
}

// 关闭游标,释放资源
$req->closeCursor();
?>

关键细节说明

  • 参数校验:把$_GET['numero-article']转成整数,避免传入非数字的非法值,同时处理参数不存在的情况。
  • 参数绑定:用:id作为占位符,然后通过execute()传参,PDO会自动处理转义,彻底避免SQL注入。
  • 安全输出:用htmlspecialchars()转义输出内容,防止XSS攻击;用nl2br()把内容里的换行转成HTML的<br>标签,保证排版正常。
  • 空数据处理:判断$donnees是否存在,避免当文章ID不存在时显示空白或报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:50:25