Rumah > Soal Jawab > teks badan
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粉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>"; }
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... }