MySQL数组获取异常:WHILE循环生成标签tab_id全为1问题排查
问题分析与修复方案
你遇到的这个问题是PHP开发里非常典型的小疏漏——把赋值运算符 = 和比较运算符搞混了!
看你代码里的关键判断行:
if ($rows['tab_id'] = 1)
这里的 = 是赋值操作,它会直接把数值1塞给 $rows['tab_id'],然后这个赋值表达式的结果就是1(非布尔值在条件判断里会被当作true),所以每次循环都会进入这个分支,而且所有行的tab_id都被强制改成了1,自然显示全是1。
修复方法
把赋值运算符改成比较运算符就行,推荐用严格相等的 ===(同时检查值和数据类型,避免类型转换带来的意外),或者用普通相等的 ==:
<?php while($rows = mysqli_fetch_array($result)){ // 用 === 做严格比较,更严谨 if ($rows['tab_id'] === 1) { ?> <li class="active"><a href="#tab<?= $rows['tab_id']; ?>" role="tab" data-toggle="tab" ><?= $rows['tab_title']; ?></a></li> <?php } else { ?> <li><a href="#tab<?= $rows['tab_id']; ?>" role="tab" data-toggle="tab" ><?= $rows['tab_title']; ?></a></li> <?php } } ?>
额外小建议
- PHP里的短标签
<?= $变量 ?>可以代替<? echo $变量; ?>,写起来更简洁,现在大部分环境都支持这个语法。 - 以后写条件判断时多留意运算符,这种赋值代替比较的错误很容易犯,但排查起来又容易忽略。
内容的提问来源于stack exchange,提问作者user5900363
相关产品推荐
相关产品推荐

