如何迭代fetch_assoc()数组?

时间:2014-10-12 23:19:04

标签: php mysqli

我是一个非常新手的程序员,我使用PHP并且对fetch_assoc()有疑问/问题。

我有这个方法返回数据库的结果咨询:

public function getUsuarios() {
    try {
        $resultado = $this->conexion->query("SELECT * FROM login_usuarios");
    } catch(Exception $e) {
        throw new Exception("Error al obtener los usuarios de la base de datos. Código de error: ".mysqli_errno);
    } finally {
        if($this->conexion != null) {
                $this->conexion->close();
        }
    }
    return $resultado;
}

此脚本迭代并显示数据库咨询结果的数据:

<table>
    <tr>
        <td>Código</td>
        <td>Nombres</td>
        <td>Apellidos</td>
    </tr>
    <?php while ($fila = mysqli_fetch_array($usuarios)) { ?>
    <tr>
        <td><?php print($fila['codUsuario']); ?></td>
        <td><?php print($fila['nombres']); ?></td>
        <td><?php print($fila['apellidos']); ?></td>
    </tr>
    <?php
    }
    $usuarios->free();
    ?>
</table>

通过这种方式,一切正常(但我不明白xD,我在论坛中看到这种方式)。

但是,我在许多网站上看到了其他方式。通过这种方式,脚本就像这样:

// first convert the result to a fetch_assoc
$usuarios = (new Consultas)->getUsuarios()->fetch_assoc();

  <table>
    <tr>
        <td>Código</td>
        <td>Nombres</td>
        <td>Apellidos</td>
    </tr>
    <?php foreach ($usuarios as $fila) { ?>
    <tr>
        <td><?php print($fila["codUsuario"]); ?></td>
        <td><?php print($fila["nombres"]); ?></td>
        <td><?php print($fila["apellidos"]); ?></td>
    </tr>
    <?php
    }
    $usuarios->free();
    ?>-->
</table>

但是通过这种方式,我有一个非法字符串偏移量mysql 。这看起来像foreach迭代每列而不是每一行。

为什么第一种方式有效,第二种方式不工作?,如何工作mysqli_fetch_array($ result)和fetch_assoc()?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

构建finally会在您致电fetch_assoc()之前关闭连接。

尝试发表评论$this->conexion->close();

您的代码遍历行。 mysqli_result::fetch_assoc只返回一行。请阅读文档。