使用foreach读取MySQL数据库遇问题,疑与多维数组有关
解决foreach读取MySQL数据的问题
你的问题出在mysqli_fetch_assoc($result)这个函数上——它只返回查询结果中的一行数据,是个一维数组。你用foreach遍历这个一维数组时,$producto拿到的是每个字段的值(比如id的数值、producto的字符串),不是数组,所以访问$producto['producto']肯定会报错。另外你还漏了echo,就算数据逻辑对了也不会把内容输出到页面。
下面给两种修复方案:
方案一:循环逐行读取数据
通过while循环每次读取一行数据,直到结果集为空:
<?php $con = mysqli_connect('localhost', 'root', '', 'productos') or exit('No se pudo conectar con la base de datos.'); $sql = "SELECT id, producto, marca, codigo FROM productos"; $result = mysqli_query($con, $sql); if (mysqli_num_rows($result) > 0) { // 循环读取每一行关联数组 while ($producto = mysqli_fetch_assoc($result)) { ?> <div> <h3><?php echo $producto['producto']; ?></h3> <h4><?php echo $producto['marca']; ?></h4> <h4><?php echo $producto['codigo']; ?></h4> </div> <?php } } else { ?> <h2>No hay productos para mostrar</h2> <?php } ?>
方案二:一次性获取所有二维数组数据
用mysqli_fetch_all()把所有查询结果转换成二维关联数组,再用foreach遍历:
<?php $con = mysqli_connect('localhost', 'root', '', 'productos') or exit('No se pudo conectar con la base de datos.'); $sql = "SELECT id, producto, marca, codigo FROM productos"; $result = mysqli_query($con, $sql); if (mysqli_num_rows($result) > 0) { // 获取所有行,返回二维关联数组 $productos = mysqli_fetch_all($result, MYSQLI_ASSOC); foreach ($productos as $producto) { ?> <div> <h3><?php echo $producto['producto']; ?></h3> <h4><?php echo $producto['marca']; ?></h4> <h4><?php echo $producto['codigo']; ?></h4> </div> <?php } } else { ?> <h2>No hay productos para mostrar</h2> <?php } ?>
注意:mysqli_fetch_all()需要传入MYSQLI_ASSOC参数,确保返回的是键名为字段名的关联数组,否则默认是索引数组,没法用$producto['producto']访问。
内容的提问来源于stack exchange,提问作者BenPesoa
相关产品推荐
相关产品推荐

