PHP读取MySQL查询结果第二行Fajr Begins字段值的实现问题
解决方案
你遇到的问题本质和字段名重复无关,是因为没有把两次循环拿到的行数据分别对应到今明两天的网页展示区域。可以通过先把结果集转成索引数组的方式处理,实现非常简单:
步骤1:执行查询并预存数据
先把查询到的两行数据分别存入对应变量,索引0固定为今日、1固定为明日,后续输出直接调用即可:
// 这里保留你原有数据库连接代码即可 $conn = mysqli_connect('你的数据库主机', '用户名', '密码', '库名'); if (mysqli_connect_errno()) { die("数据库连接失败: " . mysqli_connect_error()); } // 优化你的SQL,加ORDER BY保证第一行一定是今日数据 $sql = "select * from prayers where Date IN (CURDATE(), DATE_ADD(CURDATE(), INTERVAL 1 DAY)) ORDER BY Date ASC LIMIT 2;"; $res = mysqli_query($conn, $sql); $prayerList = []; while ($row = mysqli_fetch_assoc($res)) { $prayerList[] = $row; } // 加默认值避免无数据时报错 $today = $prayerList[0] ?? []; $tomorrow = $prayerList[1] ?? [];
步骤2:分别输出今明两天数据
在网页对应区域直接调用两个变量的字段值即可,完全不会冲突:
<!-- 今日祷告时间区域 --> <div class="today-prayer"> <h4>今日</h4> <p>Fajr Begins:<?php echo $today['Fajr Begins'] ?? ''; ?></p> <!-- 剩余今日字段按同样格式输出即可 --> </div> <!-- 明日祷告时间区域 --> <div class="tomorrow-prayer"> <h4>明日</h4> <p>Fajr Begins:<?php echo $tomorrow['Fajr Begins'] ?? ''; ?></p> <!-- 剩余明日字段按同样格式输出即可 --> </div>
可选方案:循环内判断输出
如果不想提前存数组,也可以在循环里加计数器判断当前行对应哪天,直接输出到对应区域:
$count = 0; while ($row = mysqli_fetch_assoc($res)) { if ($count === 0) { // 输出今日模块所有内容 echo '<div class="today-prayer">'; echo '<h4>今日</h4>'; echo '<p>Fajr Begins:'.$row['Fajr Begins'].'</p>'; // 其他今日字段 echo '</div>'; } else if ($count === 1) { // 输出明日模块所有内容 echo '<div class="tomorrow-prayer">'; echo '<h4>明日</h4>'; echo '<p>Fajr Begins:'.$row['Fajr Begins'].'</p>'; // 其他明日字段 echo '</div>'; } $count++; }
内容的提问来源于stack exchange,提问作者Ali1984
相关产品推荐
相关产品推荐

