suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Wie verwende ich mysqli_fetch_array() zweimal?

Ich verwende Einträge aus der Datenbank, um die Zeilen und Spalten in der Tabelle zu füllen. Ich kann jedoch nicht zweimal mit mysqli_fetch_array() auf die von SQL zurückgegebenen Daten zugreifen. Ich muss die MySQL-Ergebnisse mehrmals durchlaufen. Das funktioniert nicht:

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

Wie wendet man mysqli_fetch_array zweimal auf das gleiche Ergebnis an?

P粉917406009P粉917406009290 Tage vor729

Antworte allen(2)Ich werde antworten

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

    Antwort
    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...
    }

    Antwort
    0
  • StornierenAntwort