论坛开发中SQL查询无法正确筛选对应分类下主题的问题求助
问题核心原因
- 未获取分类页URL传递的分类ID参数,无法确定要筛选的分类范围
- 现有SQL语句
SELECT * FROM topics WHERE categorie ORDER BY id DESC LIMIT 0,5的WHERE条件未指定匹配值,实际没有执行分类筛选逻辑
修复方案
1. 修改主题查询逻辑(showAllTopicsAction.php)
替换原有代码为以下内容,同时兼容首页全量查询、分类页按ID筛选两种场景,且使用预处理查询避免SQL注入风险:
<?php require('actions/database.php'); // 判断是否为分类页的带ID请求 if(isset($_GET['id']) && is_numeric($_GET['id']) && basename($_SERVER['PHP_SELF']) == 'category.php'){ $categoryId = $_GET['id']; $getAllTopics = $bdd->prepare('SELECT * FROM topics WHERE categorie = ? ORDER BY id DESC LIMIT 0,5'); $getAllTopics->execute([$categoryId]); }else{ // 首页默认查询全量主题 $getAllTopics = $bdd->query('SELECT * FROM topics ORDER BY id DESC LIMIT 0,5'); }
2. 空状态优化(可选)
在分类页循环输出主题的代码前增加数据存在性判断,避免分类下无主题时页面空白:
<?php if($getAllTopics->rowCount() > 0){ ?> <!-- 此处保留原有循环输出主题的代码 --> <?php }else{ ?> <div class="card-body py-3 text-center text-muted">该分类下暂无主题</div> <?php } ?>
内容的提问来源于stack exchange,提问作者Us PHPname
相关产品推荐
相关产品推荐

