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 に答える