假设我使用简单的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())可用?
似乎唯一的优势就是可以提前释放连接!
答案 0 :(得分:3)
答案很简单:
因为您必须将业务逻辑与演示逻辑分开。
首先意味着您必须获得所有必需的数据,然后才开始输出
fetchAll在这件事上变得非常方便。
好吧,仔细看看你的问题后
如果我们可以直接横向PDOStatement对象,为什么它们使fetchAll()(和fetch())可用?
我认为这样的“直接遍历”仅仅是一种语法糖,下面有一个好的旧fetch()或类似的东西。