Bagaimana untuk menggunakan mysqli_fetch_array() dua kali?
P粉917406009
P粉917406009 2024-03-25 19:05:28
0
2
816

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粉917406009
P粉917406009

membalas semua(2)
P粉076987386

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>";
}
P粉593536104

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...
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan