开发者社区 问答 正文

while嵌套while循环,里面的while为什么只循环一次:报错

目前正在自学PHP中,想写一个留言本,带有留言和回复留言的功能。下面是其中的代码,第20行var_dump打印出来的结果再也面上只有一个,就是第一个,也就是说里面的while只循环了一次,这是为什么呢?

外面的while是循环读取留言的,里面的while是读取回复的,根据两张表intd和reply的id和reid是否相等判断回复的对应的留言然后按照输出的格式打印。

// 循环输出留言&回复
while($db_array = mysql_fetch_array($result))//查询的结果数组
{
    $content = nl2br($db_array['text']);//把content留言的每一行新行插入回车符
    echo $db_array['name'],' '.'<html></html>';//打印用户名
	echo '发表于:'.$db_array['datetime'].' ';
	echo '<a id="rs" method="get" action="reply.php" href="reply.php/?id='.$db_array['id'].'">回复</a>'.' ';
	echo '<td><a id="ds" method="get" action="delete.php" href="delete.php/?id='.$db_array['id'].'" onclick="return confirm(\'确定删除吗?删除后不能恢复\')">删除</a></td>'.'<br />';
    echo '内容:',nl2br($db_array['text']),'<br /><br />';//打印用户发表留言
	//打印回复
	while($db_huifu_array = mysql_fetch_array($liuyan_result))//循环读取回复数组
	{
		if($db_array['id'] == $db_huifu_array['reid']) 
		{
			
			echo '----------------------------------------------------------------------------------------------------------------<br />';
			echo $db_huifu_array['replyname'].' 回复于:',$db_huifu_array['redatetime'],'<br />';
			echo '内容:'.nl2br($db_huifu_array['retext']),'<br />';
			echo '<br />';
			var_dump($db_huifu_array['reid']);
		}
		
	}
	
    echo '<hr />';
	 /* var_dump($db_huifu_array['reid']); */
}



展开
收起
kun坤 2020-06-06 23:25:05 889 分享 版权
阿里云 AI 助理回答

根据你的描述,问题可能出在SQL查询或者循环逻辑上。为了更好地帮助你解决问题,请提供一下关键部分的代码,特别是数据库查询部分和两个while循环的具体实现。不过,我可以先给你一些常见的排查方向:

  1. SQL查询问题:请检查你的SQL查询语句是否正确地联结了留言表(intd)和回复表(reply),并且确保查询逻辑能够正确匹配留言与对应的回复。如果查询只返回了一条数据,那可能是因为联结条件、分组或限制条件设置不当。

  2. 循环逻辑问题

    • 确保外层循环(读取留言)正常工作,即$result_intd确实包含了所有留言记录。
    • 内层循环(读取回复)可能因为联结结果的处理方式不正确,导致只迭代了一次。检查内层循环中是如何处理查询结果的,确保对每个留言都能正确遍历其对应的回复。
  3. 数据关联问题:确认数据库中的数据是否如预期那样,每条留言都有正确的关联回复(如果有的话),且id和reid字段的对应关系无误。

  4. 调试信息:可以在内外层循环开始前分别添加var_dump打印出查询结果的数量,以确定问题具体出现在哪一层循环。

  5. 示例代码片段(假设简化版):

    // 假设这是你的外层循环开始
    while ($row_intd = mysqli_fetch_assoc($result_intd)) {
       var_dump(count($row_intd)); // 确认留言数量
       // 输出留言内容...
    
       // 内层循环开始,这里假设使用的是reply_id作为关联字段
       $query_reply = "SELECT * FROM reply WHERE intd_id = " . $row_intd['id'];
       $result_reply = mysqli_query($conn, $query_reply);
    
       while ($row_reply = mysqli_fetch_assoc($result_reply)) {
           var_dump(count($row_reply)); // 确认每次循环都获取到了回复
           // 输出回复内容...
       }
    }
    

如果你能提供具体的代码段,我将能给出更精确的解答。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答