我正在使用数据库中的条目来填充表中的行和列。但我无法使用 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... }