0

假设我正在使用一个简单的 SELECT 语句查询我的数据库。

$sql='SELECT * FROM products';
$s=$db->prepare($sql);
$s->execute();
foreach($s as $v){
   echo $v['productName'];
}
$s->closeCursor();

但是我看到了下面的代码,使用 fetchAll() 来做同样的事情:

$sql='SELECT * FROM products';
$s=$db->prepare($sql);
$s->execute();
$products=$s->fetchAll();
$s->closeCursor();
foreach($products as $v){
   echo $products['productName'];
}

首先,我知道 fetchAll() 不应该用于大型结果集。但是,问题是:如果我们可以直接遍历 prepare() 方法返回的 PDOStatement 对象,为什么我们要让 fetchAll()(和 fetch())可用?

似乎唯一的好处是更早地释放连接!

4

1 回答 1

3

答案很简单:
因为您必须将业务逻辑与表示逻辑分开。
意味着首先您必须获取所有必需的数据,然后才能开始输出。
而 fetchAll 在这件事上变得相当得心应手。

好吧,仔细看看你的问题

如果我们可以直接遍历 PDOStatement 对象,为什么它们使 fetchAll()(和 fetch())可用?

我认为这样的“直接遍历”只是一种语法糖,下面有很好的旧 fetch() 或类似的东西。

于 2013-01-27T12:46:37.303 回答