Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO->;为什么要使用fetchAll?_Php_Pdo - Fatal编程技术网

Php PDO->;为什么要使用fetchAll?

Php PDO->;为什么要使用fetchAll?,php,pdo,Php,Pdo,假设我用一个简单的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->prepar

假设我用一个简单的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()可用?

看来,唯一的优势将是免费的连接早

答案很简单:
因为您必须将业务逻辑与演示逻辑分开。
意味着首先必须获取所有必需的数据,然后才开始输出。
在这件事上,所有这些都变得非常方便

好吧,仔细看看你的问题

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

我认为这种“直接遍历”仅仅是一种语法糖,下面有好的fetch()之类的东西

答案很简单:
因为您必须将业务逻辑与演示逻辑分开。
意味着首先必须获取所有必需的数据,然后才开始输出。
在这件事上,所有这些都变得非常方便

好吧,仔细看看你的问题

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


我认为这种“直接遍历”仅仅是一种语法糖,下面有好的fetch()之类的东西

甚至当你在一个PHP文件中做一些简单的事情时,你也可能需要做一些分离,比如在你开始向文件或网络写东西之前关闭光标,否则可能会崩溃。是的,事实上foreach会在下面调用fetch()@Friedsurf,这实际上是我的评论的本质,因为我在那里没有看到任何fetch()。即使在单个PHP文件中执行一些简单的操作,也可能需要进行一些分离,例如在向文件写入内容或网络崩溃之前关闭光标。是的,实际上foreach将在下面调用fetch()@Friedsurf,这实际上是我评论的本质,因为我在那里没有看到任何fetch()。你测试过它们吗?你测试过它们吗?