使用foreach循环展示数据库内容报错,需实现逐行逐列打印
解决你的MySQLi循环遍历结果报错问题
嘿,我一眼就看到你代码里的问题啦!咱们一步步来梳理:
首先,你的核心问题出在echo那行的变量使用和拼写错误,还有对MySQLi结果集遍历逻辑的误解。咱们先拆解问题:
问题分析
- 变量拼写错误:你写的
$attr_dt_trian多了一个字母n,正确的变量名是$attr_dt_train(和循环里定义的一致)。 - 遍历逻辑错误:在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
相关产品推荐
相关产品推荐

