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

使用foreach循环展示数据库内容报错,需实现逐行逐列打印

解决你的MySQLi循环遍历结果报错问题

嘿,我一眼就看到你代码里的问题啦!咱们一步步来梳理:

首先,你的核心问题出在echo那行的变量使用和拼写错误,还有对MySQLi结果集遍历逻辑的误解。咱们先拆解问题:

问题分析

  1. 变量拼写错误:你写的$attr_dt_trian多了一个字母n,正确的变量名是$attr_dt_train(和循环里定义的一致)。
  2. 遍历逻辑错误:在foreach循环里,$row_dt_train已经是当前行的完整数组,$attr_dt_train就是当前列的值——你完全不需要再从$result里去取值,直接用循环里的变量就行!

修正后的代码

我帮你把代码改好了,还加了查询失败的判断(避免结果集为空时出错):

$sql = "SELECT a.*, b.klasifikasi FROM kl_stre as b INNER JOIN data_latih as a ON a.id_stres = b.id_stres ORDER BY a.id_dl";
$result = mysqli_query($conn, $sql);

// 先检查查询是否成功,避免后续循环报错
if (!$result) {
    die("数据库查询失败: " . mysqli_error($conn));
}

// 遍历每一行数据
foreach ($result as $row_dt_train):
    // 遍历当前行的每一列
    foreach ($row_dt_train as $attr => $attr_dt_train):
        // 直接输出列名和对应值(如果只需要值,就写 echo $attr_dt_train; 即可)
        echo "{$attr}: {$attr_dt_train} ";
    endforeach;
    // 每行结束后换行,方便阅读
    echo "<br>";
endforeach;

更常用的写法(推荐)

其实在PHP里,用while循环配合mysqli_fetch_assoc是遍历MySQLi结果集更常规的写法,逻辑更清晰:

$sql = "SELECT a.*, b.klasifikasi FROM kl_stre as b INNER JOIN data_latih as a ON a.id_stres = b.id_stres ORDER BY a.id_dl";
$result = mysqli_query($conn, $sql);

if (!$result) {
    die("数据库查询失败: " . mysqli_error($conn));
}

// 逐行取出关联数组,直到没有数据为止
while ($row_dt_train = mysqli_fetch_assoc($result)) {
    // 遍历当前行的列
    foreach ($row_dt_train as $attr => $attr_dt_train) {
        echo "{$attr}: {$attr_dt_train} ";
    }
    echo "<br>";
}

这样改完之后,就能正常打印出数据库的每一行和每一列啦!

内容的提问来源于stack exchange,提问作者christ_tp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:19:36