PHP出现unexpected endwhile语法错误,请求排查navigation.php问题
解决PHP Parse Error: Unexpected 'endwhile' 错误
这个报错的核心原因很明确:你在代码中使用了endwhile语句,但它没有找到对应的、语法正确的while起始结构。PHP里while循环有两种合法写法,这两种写法不能混用,否则就会触发这类语法错误。
错误根源分析
从你提供的代码片段和报错位置来看,大概率是以下两种情况之一:
- 你用了
endwhile;来闭合循环,但开头的while语句是以花括号{结尾的(而不是冒号:),两种语法不匹配; while循环的代码块没有完整编写,导致endwhile找不到对应的起始标记。
具体修复方案
根据你的代码场景,这里提供两种可行的修复方式:
方式1:使用花括号闭合循环(最常用的写法)
如果你的代码原本是用花括号来包裹循环内容,那就移除endwhile;,改用}来闭合循环:
<?php $sql = "SELECT * FROM categories WHERE parent = 0"; $pquery = $db->query($sql); ?> <nav class="navbar navbar-expand-sm bg-dark navbar-dark fixed-top"> <!-- Brand --> <a class="navbar-brand" href="#">THELEWALAONLINE</a> <!-- Links --> <ul class="navbar-nav"> <?php while($parent = mysqli_fetch_assoc($pquery)) { // 用花括号开启循环 ?> <!-- 这里添加循环生成的导航项,比如: --> <li class="nav-item"> <a class="nav-link" href="#"><?php echo $parent['category_name']; ?></a> </li> <?php } // 用花括号闭合循环,替换掉原来的endwhile; ?> </ul> </nav>
方式2:使用冒号+endwhile语法(适合嵌入HTML的场景)
如果坚持要用endwhile;,那开头的while语句必须以冒号:结尾,不能用花括号:
<?php $sql = "SELECT * FROM categories WHERE parent = 0"; $pquery = $db->query($sql); ?> <nav class="navbar navbar-expand-sm bg-dark navbar-dark fixed-top"> <!-- Brand --> <a class="navbar-brand" href="#">THELEWALAONLINE</a> <!-- Links --> <ul class="navbar-nav"> <?php while($parent = mysqli_fetch_assoc($pquery)): // 用冒号开启循环 ?> <!-- 这里添加循环生成的导航项 --> <li class="nav-item"> <a class="nav-link" href="#"><?php echo $parent['category_name']; ?></a> </li> <?php endwhile; // 这里的endwhile可以正确匹配 ?> </ul> </nav>
额外注意点
- 确保你的
while循环条件是完整的:你提供的代码片段里while($parent = mysq...没写完,完整的应该是mysqli_fetch_assoc($pquery)(或者mysqli_fetch_array等),用来从查询结果中取出每一行数据; - 检查第26行附近的代码,确认没有多余的或者遗漏的PHP标签,这也可能导致语法解析错误。
内容的提问来源于stack exchange,提问作者Rahul Dighe
相关产品推荐
相关产品推荐

