如何在查询中使用PHP循环,而不是将所有结果放入数组然后循环遍历数组
我使用数组和循环的方式是这样的:
<?php $userInfos = $qry->querySelect( SQL CODE HERE );
foreach($userInfos as $uInfo)
{
$fName = $uInfo['fName'];
$lName = $uInfo['lName'];
$gender = $uInfo['gender'];
?>
First name is: <? echo $fName; ?> and Last name is <? echo $lName; ?>.
<?php } ?>
我想更好地了解PHP循环查询的方式比数组更好。请将我重定向到一些示例,或者可能包含MySQL代码。
如果我提取数百万条记录,如何将上述php代码转换为更高效?
非常感谢!
答案 0 :(得分:2)
你可以用mysqli_fetch_row()
做一个简单的循环答案 1 :(得分:1)
您似乎需要使用 querySelect
功能以外的其他功能(似乎返回数组)。
也许$qry
对象有一些其他函数会返回一个你可以获取的语句句柄,就像普通的mysqli_
和PDO
接口提供的一样。
在我看来,$qry
来自本土的MySQL库“包装器”类,它暴露了有限的功能子集。如果该对象没有提供获取语句句柄的方法,则可能需要将相应的函数添加到对象定义中,或者放弃该对象,并使用mysqli
或PDO
。
有很多如何做到这一点的例子。使用PDO,我们的第一个剪切(在我们添加错误检查和异常处理之前)可能看起来像这样:
$sql="SELECT t.name FROM really_big_table t";
$sth=$dbh->prepare($sql);
$sth->execute();
while ($row = $sth->fetch(PDO::FETCH_ASSOC) ) {
echo "<br>Name is: ". htmlentities($row['name']);
}
$sth->close();
答案 2 :(得分:1)
我执行以下操作:
//DB Query getData
$q_getData = "SELECT `stuff`, `moreStuff`, `otherStuff` FROM `table`";
$rsgetData = mysqli_query($DBi, $q_getData) or die(mysqli_error($DBi));
$row_rsgetData = mysqli_fetch_assoc($rsgetData);
$rows_rsgetData = mysqli_num_rows($rsgetData);
if($rows_rsgetData>0) {
do {
echo $row_rsgetData['stuff'] . ' ' . $row_rsgetData['moreStuff'] . '<br>';
echo $row_rsgetData['otherStuff'];
} while ($row_rsgetData = mysqli_fetch_assoc($rsgetData));
$rows = mysqli_num_rows($rsgetData);
if($rows > 0) {
mysqli_data_seek($rsgetData, 0);
$row_rsgetData = mysqli_fetch_assoc($rsgetData);
}
mysqli_free_result($rsgetData);
};
运行查询并循环遍历每一行,直到没有行为止 - 只有在第一个地方返回了行时。一旦完成,它就可以释放连接。