PHP 使用 for 循环遍历 MySQLi 记录集
PHP Use for loop to iterate over 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
循环会更容易吗?如果可以,怎么做?
在写这个问题的时候,我突然决定再试一次,但方式和以前不同。我一直在寻找一种 efficient/safe 方法来判断记录集何时为空(在自定义最大数量大于记录数以及没有记录时遇到了 运行 问题)。
//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);
据我所知,这是遍历 set/custom 条记录然后停止的更好方法。它还将安全地捕获记录集的末尾(假设它在截止数之前到达),并结束循环。
编辑
正如上面 HenryTK 的回答所指出的,如果您可以控制查询,最好的方法是使用 LIMIT
SQL 语句。但是,如果您只能访问记录集,我仍然认为 for
循环会节省时间。 (虽然我不确定这会在什么时候发生)。
您可以在查询中使用LIMIT
。例如:
SELECT * FROM tblNames ORDER BY numberID DESC LIMIT 15
这样您就不必担心如果您的查询 return 少于 15 个结果会发生什么。
每当我使用 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
循环会更容易吗?如果可以,怎么做?
在写这个问题的时候,我突然决定再试一次,但方式和以前不同。我一直在寻找一种 efficient/safe 方法来判断记录集何时为空(在自定义最大数量大于记录数以及没有记录时遇到了 运行 问题)。
//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);
据我所知,这是遍历 set/custom 条记录然后停止的更好方法。它还将安全地捕获记录集的末尾(假设它在截止数之前到达),并结束循环。
编辑
正如上面 HenryTK 的回答所指出的,如果您可以控制查询,最好的方法是使用 LIMIT
SQL 语句。但是,如果您只能访问记录集,我仍然认为 for
循环会节省时间。 (虽然我不确定这会在什么时候发生)。
您可以在查询中使用LIMIT
。例如:
SELECT * FROM tblNames ORDER BY numberID DESC LIMIT 15
这样您就不必担心如果您的查询 return 少于 15 个结果会发生什么。