cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk menggunakan mysqli_fetch_array() dua kali?

Saya menggunakan entri daripada pangkalan data untuk mengisi baris dan lajur dalam jadual. Tetapi saya tidak boleh mengakses data yang dikembalikan oleh SQL menggunakan mysqli_fetch_array() dua kali. Saya perlu mengulangi hasil mysqli beberapa kali. Ini tidak berfungsi:

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

Bagaimana cara memohon mysqli_fetch_array kepada hasil yang sama dua kali?

P粉917406009P粉917406009290 hari yang lalu733

membalas semua(2)saya akan balas

  • P粉076987386

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

    Anda hendaklah sentiasa mengasingkan manipulasi data daripada output.

    Mula-mula pilih data anda:

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

    Perhatikan bahawa mulai PHP 5.3 anda boleh menggunakan fetch_all() dan bukannya gelung eksplisit:

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

    Kemudian gunakannya seberapa banyak yang diperlukan:

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

    balas
    0
  • P粉593536104

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

    Anda tidak perlu while 循环,也根本不需要使用 mysqli_fetch_array()!

    Anda boleh menggunakannya dalam 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>";
    }

    Walau bagaimanapun, anda harus memisahkan logik pangkalan data daripada logik paparan, untuk mencapai ini adalah lebih baik menggunakan fetch_all(MYSQLI_ASSOC) dalam logik pangkalan data untuk mendapatkan semula semua rekod ke dalam tatasusunan.

    Jika anda mengekstrak semua data ke dalam tatasusunan, anda boleh mengulang tatasusunan seberapa banyak kali yang anda mahu.

    $data = $db_res->fetch_all(MYSQLI_ASSOC);
    
    foreach($data as $row) {
        // logic here...
    }

    balas
    0
  • Batalbalas