while循环显示SELECT查询后的所有数据

时间:2014-03-07 14:29:23

标签: php database sqlite pdo

我知道这可能是一个非常基本的问题,但我是php和数据库的新手,我正在试图找出一个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 "...";

}

4 个答案:

答案 0 :(得分:3)

fetchAll()会返回包含所有结果集行的数组,而fetch()会从结果集返回单行。< / p>

fetchAll()用法:

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

fetch()用法:

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

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

答案 1 :(得分:1)

$stmt = $db->prepare("SELECT * FROM properties");
$stmt -> execute();

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

//$row['column_name']

}

答案 2 :(得分:0)

fetchAll确实以关联数组的形式获取所有内容(如标记FETCH_ASSOC所示)。它会自动执行,您不必担心它。

答案 3 :(得分:0)

如果你这样做,你会发现你已经拥有了一个数组中的所有数据:

$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....
}