每当我使用PHP MySQLi记录集时,我总是使用标准while
循环处理返回的数据来迭代记录集。然而,最近,我开始想知道是否有办法使用for
循环。在想要限制返回结果数量的情况下,这将非常方便。
以下是使用while
循环的示例:
//Prepare a query that will produce a reverse-order recordset
$sql = "SELECT * FROM tblNames ORDER BY numberID DESC";
$recordset = $conn -> query($sql);
//Count the number of contacts added to the list
$contactCount = 0;
while($row = $recordset -> fetch_assoc())
{
//If the list has reached its maximum number (5), end the display loop
if($contactCount >= 5)
{
break;
}
$contactList .= $row["name"] . "<br>";
//Increment the number of contacts added to the list
$contactCount ++;
}
//Use '$contactList' somewhere....
echo($contactList);
虽然这肯定有效,但在指定的迭代次数之后必须有更好的方法来结束循环。在这种情况下使用for
循环更容易吗?如果是这样,怎么样?
答案 0 :(得分:1)
You can use LIMIT
in the query. For example:
SELECT * FROM tblNames ORDER BY numberID DESC LIMIT 15
This way you don't have to worry about what happens if your query does return less than 15 results.
答案 1 :(得分:-1)
当我写这个问题的时候,我突然决定最后一次尝试,但方式与以前不同。我一直在寻找一种有效/安全的方法来判断记录集何时为空(当自定义最大数量大于记录数时,以及没有记录时已经遇到问题)。
//Execute the SQL query (reverse order), and store the results in a recordset
$sql = "SELECT * FROM tblNames ORDER BY numberID DESC";
$recordset = $conn -> query($sql);
//Use a 'for' loop to iterate over the recordset
for($i = 0; $i < 15; $i++)
{
//If there is another row in the recordset, add the column value to the list
if($row = $recordset -> fetch_assoc())
{
$contactList .= $row["name"] . "<br>";
}
else
{
//Break from the loop when there are no more records (used if the
// given maximum number was actually greater than the number of records)
break;
}
}
echo($contactList);
据我所知,这是一个更好的方法来循环设置/自定义数量的记录,然后停止。它还将安全地捕获记录集的结尾(假设它在截止数之前到达),并结束循环。
<强> 修改 强>
正如上面HenryTK的回答所指出的,如果您可以控制查询,最好的方法是使用LIMIT
SQL语句。但是,如果您只能访问记录集,我仍然认为for
循环将节省时间。 (虽然我不确定何时会发生这种情况)。