搜尋

首頁  >  問答  >  主體

如何使用mysqli_fetch_array()兩次?

我正在使用資料庫中的條目來填充表中的行和列。但我無法使用 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粉917406009P粉917406009244 天前649

全部回覆(2)我來回復

  • P粉076987386

    P粉0769873862024-03-26 11:21:31

    您應該始終將資料操作與輸出分開。

    首先選擇您的資料:

    $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>";
    }

    回覆
    0
  • P粉593536104

    P粉5935361042024-03-26 10:33:18

    您不需要 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...
    }

    回覆
    0
  • 取消回覆