使用PHP与SQL从数据库动态生成无序列表仅返回最后一条数据求助
问题核心原因
- 你在
while循环中直接给$name_Interest变量赋值,每一次循环的新结果都会覆盖上一次的取值,循环结束后该变量只会保留最后一次查询到的兴趣标签,所以最终只能展示一条结果。 - 你可以先直接在数据库中执行你的SELECT查询语句,确认返回的行数是否大于1,如果SQL本身仅返回1条结果,还需要检查两张表的外键关联逻辑、WHERE条件的匹配值是否正确。
修复代码示例
你只需要将查询到的所有兴趣标签存入数组,后续遍历数组输出即可:
$request2 = "SELECT `interest`.`name_Interest` FROM `interest` INNER JOIN `users` ON `interest`.`ID_user` = `users`.`ID_user` WHERE `pseudo` = '".$url_pseudo."' "; $resultat2 = mysqli_query($connexion, $request2) or die (mysqli_error($connexion)); $nb_resultat2 = mysqli_num_rows($resultat2); $interestList = []; // 初始化空数组存储所有兴趣标签 if ($nb_resultat2 > 0) { while ($row = mysqli_fetch_array($resultat2)){ // 把每个查询到的兴趣标签追加到数组,不会覆盖之前的结果 $interestList[] = $row["name_Interest"]; } } // 前端输出示例,遍历数组渲染所有标签 foreach($interestList as $tag){ echo '<span class="interest-tag">'.$tag.'</span> '; }
额外安全优化建议
你当前的SQL语句直接拼接变量$url_pseudo存在SQL注入风险,建议改成参数化查询写法:
$stmt = mysqli_prepare($connexion, "SELECT `interest`.`name_Interest` FROM `interest` INNER JOIN `users` ON `interest`.`ID_user` = `users`.`ID_user` WHERE `pseudo` = ?"); mysqli_stmt_bind_param($stmt, "s", $url_pseudo); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); $interestList = []; while($row = mysqli_fetch_assoc($result)){ $interestList[] = $row['name_Interest']; }
内容的提问来源于stack exchange,提问作者Islabe
相关产品推荐
相关产品推荐

