【问题标题】:While loop to display all data after SELECT queryWhile循环显示SELECT查询后的所有数据
【发布时间】:2014-03-07 14:29:23
【问题描述】:

我知道这可能是一个非常基本的问题,但我是 php 和数据库的新手,我正在尝试找出一个 while 条件,它可以让 while 循环一直运行直到所有(如果知道该怎么做也很好它为固定数量的)数据取自数据库。

$stmt = $db->prepare("SELECT * FROM icecreams");
$stmt -> execute();
$row = $stmt -> fetchAll(PDO::FETCH_ASSOC);

所以现在我需要弄清楚我需要什么条件,逻辑是

while (there is data to fetch) {

  echo "<h1>$row['flavour']</h1>";
  echo "...";

}

【问题讨论】:

    标签: php database sqlite pdo


    【解决方案1】:

    fetchAll() 返回一个包含所有结果集行的数组,而fetch() 从结果集中返回一个单行

    fetchAll()用法:

    $array = $stmt->fetchAll(PDO::FETCH_ASSOC);
    foreach ($array as $row) {
        # code...
    }
    

    fetch() 用法:

    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
       # code...
    } 
    

    如果你打算用它来打印 HTML,第二个选项似乎更好。对于小型记录集,性能差异并不重要,但如果您正在处理大量记录,那么fetchAll() 可能会慢一些,因为它会尝试将整个数据一次映射到一个数组中。

    【讨论】:

      【解决方案2】:
      $stmt = $db->prepare("SELECT * FROM properties");
      $stmt -> execute();
      
      while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
      
      //$row['column_name']
      
      }
      

      【讨论】:

        【解决方案3】:

        fetchAll 确实以关联数组的形式获取所有内容(正如标志 FETCH_ASSOC 所说)。它会自动完成,您不必担心。

        【讨论】:

        • 但是在将数据显示为 html 方面,我将如何实现呢? while (fetchAll(..)) 还是别的什么?
        【解决方案4】:

        如果你这样做,那么你会看到你的所有数据都已经在一个数组中了:

        $row = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        echo '<pre>'.print_r($row, true).'</pre>';
        

        所以现在你可以简单地循环访问数据:

        foreach($row as $k=>$v)
        {
            echo $k.'<br>'; // this will show you what row # you are on, sometimes useful :)
            echo $v['title'].'<br>';
            // etc....
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-11-11
          • 2015-11-09
          • 1970-01-01
          • 2012-03-23
          • 2013-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多