You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP循环动态生成卡片时重复显示MySQL首条name字段的问题

问题分析与解决方案

你的代码问题出在嵌套循环逻辑错误以及MySQLi结果集的指针特性上:

  1. 第一次执行内层while($query_row=mysqli_fetch_array($query_burn))时,会把$query_burn结果集的指针移动到末尾,后续再调用mysqli_fetch_array直接返回false,内层循环不再执行。
  2. 你看到重复显示第一条name,大概率是误加了不必要的内层循环,实际需求只是遍历$result中的每条name生成卡片。

修正方案1:仅遍历$result生成卡片(最符合你的需求)

如果目标是为$result中的每个name生成独立卡片,直接去掉内层循环即可:

<?php while($row = mysqli_fetch_array($result)) { ?>
    <div class="col-lg-3">
        <!-- Card with header and footer -->
        <div class="card">
            <div class="card-header"><?php echo $row['name']; ?></div>
            <div class="card-body">
                <h5 class="card-title">Card with header and footer</h5>
                Ut in ea error laudantium quas omnis officia. Sit sed praesentium voluptas.
            </div>
            <div class="card-footer">
                Footer
            </div>
        </div><!-- End Card with header and footer -->
    </div>
<?php } ?>

修正方案2:需结合两个结果集的数据

如果确实需要同时使用$result和$query_burn的内容,先将$query_burn的结果存入数组,避免指针耗尽的问题:

<?php
// 提前将$query_burn的结果存入数组,可反复遍历
$burn_records = [];
while($query_row = mysqli_fetch_array($query_burn)) {
    $burn_records[] = $query_row;
}
?>

<?php while($row = mysqli_fetch_array($result)) { ?>
    <?php foreach($burn_records as $query_row) { ?>
        <div class="col-lg-3">
            <!-- Card with header and footer -->
            <div class="card">
                <div class="card-header"><?php echo $row['name']; ?></div>
                <div class="card-body">
                    <h5 class="card-title">Card with header and footer</h5>
                    Ut in ea error laudantium quas omnis officia. Sit sed praesentium voluptas.
                </div>
                <div class="card-footer">
                    Footer
                </div>
            </div><!-- End Card with header and footer -->
        </div>
    <?php } ?>
<?php } ?>

核心原理说明

MySQLi的mysqli_fetch_array函数会移动结果集的内部指针,每次调用返回当前指针位置的行,然后指针后移。当指针到达结果集末尾时,后续调用会返回false,循环终止。因此,未存储的结果集只能被遍历一次,嵌套循环中内层结果集会被一次性耗尽,导致外层后续迭代无法触发内层循环。

内容的提问来源于stack exchange,提问作者Rafay Siddiqui.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 17:31:09