为什么我们在使用PDO :: query()时使用fetch()?

So, we know that PDO::query() returns PDOStatement object and the PDOStatement class implements Traversable so it allows us to loop through it's object using foreach loop:

$db = new PDO($dsn, $dbusername, dbpassword);
$sql = 'SELECT name, surname, gender FROM students';
$stmt = $db->query($sql);

foreach($stmt as $row){
    echo $row['name'] . "<br>";
    echo $row['surname'] . "<br>";
    echo $row['gender'] . "<br>";
}

The code is nice and clean. (I know that due to the security issues using query() can create and we all should be faithful to prepare() and excecute() for that.)

My question is why do we bother to use fetch() to retrieve data when we can get the same result without using it. It seems to me an extra step.

  1. Because there are queries that return only one row, for which a foreach loop would be an extra step.
  2. Because traversable PDOStatement is just a syntax sugar, just another way to do it, for anyone who like it this way. While fetch() remains most familiar and straightforward method.