【问题标题】:how to loop through PHP code and MySQL?如何循环遍历 PHP 代码和 MySQL?
【发布时间】:2015-05-23 03:32:10
【问题描述】:

如何在查询中使用 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 代码转换为更高效?

非常感谢!

【问题讨论】:

  • 只需确保不使用 *(所有列)构建查询,而只构建您需要的查询。除此之外,您需要对数据库运行查询并让 mysql 返回一个 php 数组,然后循环遍历该数组,我猜您已经在使用 querySelect 了。
  • 我只是想知道,循环查询而不是包含所有值的数组有什么好处吗?
  • @danidee:是的,这是有好处的。 fetch 循环的好处是它需要less 内存。使用 fetch 循环,我们可以在检索到每一行时对其进行处理,然后将其丢弃,并将该内存重新用于下一行。我们一次只需要在内存中保存“一行”。将 fetchAll 放入一个数组中,这可能需要分配大量内存,以在我们处理第一行之前保存一个包含 每个 翻转行的 Hugh jass 数组。 (因此,如果您有无限量的可用内存并且它不能用于其他任何事情,那么没有区别。)

标签: php mysql arrays


【解决方案1】:

你可以用 mysqli_fetch_row() 做一个简单的循环

http://php.net/manual/en/mysqli-result.fetch-row.php

【讨论】:

    【解决方案2】:

    您似乎需要使用 querySelect 函数(它似乎返回一个数组)以外的其他东西。

    也许$qry 对象有一些其他函数会返回您可以从中获取的语句句柄,就像普通的mysqli_PDO 接口提供的一样。

    在我看来,$qry 来自一个本土 MySQL 库“包装器”类,它公开了有限的函数子集。如果该对象不提供获取语句句柄的方法,您可能需要将适当的函数添加到对象定义中,或者放弃该函数而只使用mysqliPDO

    有很多例子可以说明如何做到这一点。使用 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();
    

    参考:http://php.net/manual/en/pdostatement.fetch.php

    【讨论】:

      【解决方案3】:

      我执行以下操作:

      //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'] . '&nbsp;' . $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);
      };
      

      这将运行查询并循环遍历每一行,直到没有剩余的行 - 仅当首先返回行时。全部完成后,它会释放连接。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-05
        • 1970-01-01
        • 1970-01-01
        • 2011-03-09
        • 1970-01-01
        • 2015-09-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多