如何使用mysqli_fetch_array()两次?
P粉917406009
P粉917406009 2024-03-25 19:05:28
0
2
644

我正在使用数据库中的条目来填充表中的行和列。但我无法使用 mysqli_fetch_array() 两次访问 SQL 返回的数据。我需要多次循环 mysqli 结果。这不起作用:

//Copy the result
$db_res = mysqli_query( $db_link, $sql );
$db_res2=$db_res;

//Top row
while ($row = mysqli_fetch_array( $db_res, MYSQL_ASSOC))
{
        echo "<td>". $row['Title'] . "</td>";
}

//leftmost column
while ($row = mysqli_fetch_array( $db_res2, MYSQL_ASSOC))
{
                    echo "<tr>";
        echo "<td>". $row['Title'] . "</td>";
                    .....
                    echo "</tr>";
}

如何对同一结果应用 mysqli_fetch_array 两次?

P粉917406009
P粉917406009

全部回复(2)
P粉076987386

您应该始终将数据操作与输出分开。

首先选择您的数据:

$db_res = mysqli_query( $db_link, $sql );
$data   = array();
while ($row = mysqli_fetch_assoc($db_res))
{
    $data[] = $row;
}

请注意,从 PHP 5.3 开始,您可以使用 fetch_all() 而不是显式循环:

$db_res = mysqli_query( $db_link, $sql );
$data   = $db_res->fetch_all(MYSQLI_ASSOC);

然后根据需要多次使用它:

//Top row
foreach ($data as $row)
{
    echo "<td>". $row['Title'] . "</td>";
}

//leftmost column
foreach ($data as $row)
{
    echo "<tr>";
    echo "<td>". $row['Title'] . "</td>";
    .....
    echo "</tr>";
}
P粉593536104

您不需要 while 循环,也根本不需要使用 mysqli_fetch_array()

您可以简单地在 mysqli_result 对象本身上循环多次。它实现了 Traversable 接口,允许在 foreach 中使用。

//Top row
foreach($db_res as $row) {
    echo "<td>". $row['Title'] . "</td>";
}

//leftmost column
foreach($db_res as $row) {
    echo "<tr>";
    echo "<td>". $row['Title'] . "</td>";
    .....
    echo "</tr>";
}

但是,您应该将数据库逻辑与显示逻辑分开,为了实现这一点,最好在数据库逻辑中使用 fetch_all(MYSQLI_ASSOC) 将所有记录检索到数组中。

如果将所有数据提取到一个数组中,则可以根据需要多次循环该数组。

$data = $db_res->fetch_all(MYSQLI_ASSOC);

foreach($data as $row) {
    // logic here...
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板