PHP第二个while循环在while循环中只运行一次
Posted
技术标签:
【中文标题】PHP第二个while循环在while循环中只运行一次【英文标题】:PHP 2nd while loop within a while loop only run once 【发布时间】:2016-08-31 09:10:33 【问题描述】:在我的 php/mysql 编码方面需要一些专家帮助。我希望我的 while 循环检查每个块,并通过使用第二个 while 循环来完成它,从而在 1 行中回显同一块中的所有用户。我设法显示它,但它不会分别显示来自其他块的其他用户。
到目前为止,这是我的代码,不过我对 php 还是很陌生。
<html>
<head>
</head>
<body>
<table border='1'>
<th>Block</th>
<th>company</th>
<th>Username</th>
<th>datetime</th>
<?php
require('db.php');
$sql = "
SELECT block_directories.block, event_details.username, event_details.datetime, event_details.eventDate, companies.company, event_details.tag
FROM block_directories INNER JOIN event_details
ON block_directories.block_id = event_details.tag
INNER JOIN companies
ON event_details.company=companies.company_id"
;
$records=mysql_query($sql);
$sqlblock = "
SELECT * FROM block_directories"
;
$blockrecords=mysql_query($sqlblock);
//while loop to echo all blocks into table ina column
while($blkrecords=mysql_fetch_assoc($blockrecords))
echo "<tr>";
echo "<td>$blkrecords['block']</td>";
//while loop to echo all users within the same block
while($users=mysql_fetch_assoc($records))
if($users['block']==$blkrecords['block'])
echo "<td>$users['company']</td>";
echo "<td>$users['username']</td>";
echo "<td>$users['datetime']</td>";
echo "</tr>";
?>
</table>
</body>
Output Display of the code
【问题讨论】:
那是因为你在第一个外循环中内循环到 $records 记录集的末尾,但是在第二个外循环中,你已经在记录集的末尾,所以它赢了除非您使用 mysql_data_seek 倒回 $records 记录集,否则不会再次循环。 如果没有问题,请尝试使用mysqli
或PDO
。 mysql
已弃用
【参考方案1】:
那是因为mysql_fetch_assoc()
在它的指针到达结果集的末尾后没有返回行。
您需要通过添加以下行将其重新指向结果集的第一个。
mysql_data_seek($records, 0);
所以你的循环代码是这样的,
while($blkrecords=mysql_fetch_assoc($blockrecords))
echo "<tr>";
echo "<td>$blkrecords['block']</td>";
//while loop to echo all users within the same block
while($users=mysql_fetch_assoc($records))
if($users['block']==$blkrecords['block'])
echo "<td>$users['company']</td>";
echo "<td>$users['username']</td>";
echo "<td>$users['datetime']</td>";
mysql_data_seek($records, 0);
echo "</tr>";
mysql_* 扩展在 PHP 5.5.0 中被弃用,并在 PHP 7.0.0。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。
【讨论】:
以上是关于PHP第二个while循环在while循环中只运行一次的主要内容,如果未能解决你的问题,请参考以下文章
PHP——数组中的each(),list()和while循环遍历数组
如何使用 tkinter 事件“继续”或暂停不同的 while 循环?
c_cpp leetcode 83.注意第二个while循环,它可能导致null ListNode结构,因此需要进行NULL检查。