PHP使用for循环来迭代MySQLi记录集

时间:2015-07-08 15:25:26

标签: php database for-loop mysqli recordset

每当我使用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循环更容易吗?如果是这样,怎么样?

2 个答案:

答案 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循环将节省时间。 (虽然我不确定何时会发生这种情况)。