我正在使用資料庫中的條目來填充表中的行和列。但我無法使用 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粉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>"; }
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... }