fetch в PDO получает только один результат

У меня есть этот код

$sql = new PDO('mysql:host=localhost;dbname=b','root','root'); $f = $sql->query('select * from user'); $sql->setFetchMode(PDO::FETCH_ASSOC); while($row = $f->fetch()){ print_r($row); } 

Выход

 Array ( [id] => 1 [name] => turki [mail] => ablaf [pass] => 144 ) Array ( [id] => 2 [name] => wrfwer [mail] => fwerf [pass] => werf ) 

и это то, чего я действительно хочу. Но если я это сделаю

 <?php $sql = new PDO('mysql:host=localhost;dbname=b','root','root'); $f = $sql->query('select * from user'); $f->setFetchMode(PDO::FETCH_ASSOC); print_r($f->fetch()); ?> 

Выход

 Array ( [id] => 1 [name] => turki [mail] => ablaf [pass] => 144 ) 

У него есть один результат, но у меня есть две строки в таблице; почему это?

Fetch следует использовать для отображения следующей строки из результата базы данных

Чтобы получить все строки, вы должны использовать fetchAll () ;

  • PDOStatement :: fetch – выбор следующей строки из набора результатов
  • PDOStatement :: fetchAll () – возвращает массив, содержащий все строки набора результатов

Измените свой пример на:

  <?php $sql = new PDO('mysql:host=localhost;dbname=b','root','root'); $f = $sql->query('select * from user'); $f->setFetchMode(PDO::FETCH_ASSOC); print_r($f->fetchAll()); ?> 

или если вы хотите использовать PDOStatement :: fetch для

  <?php $sql = new PDO('mysql:host=localhost;dbname=b','root','root'); $f = $sql->query('select * from user'); while($row = $sth->fetch(PDO::FETCH_ASSOC)) { print_r($row); } ?> 

В этом случае используйте fetchAll .

 $result = $f->fetchAll(); print_r($result); 

PDOStatement: выборка извлекает только одну запись из объекта PDOStatement (везде, где это указатель), поэтому вам нужно выполнить цикл с помощью выборки

Метод fetch () возвращает только одну запись и устанавливает внутренний указатель для указания следующей записи. Вы ожидаете от этого метода, чего он не может вернуть.

Возможно, попробуйте другой метод, например fetchAll:

http://php.net/manual/en/pdostatement.fetchall.php

 <?php $sth = $dbh->prepare("SELECT name, colour FROM fruit"); $sth->execute(); /* Fetch all of the remaining rows in the result set */ print("Fetch all of the remaining rows in the result set:\n"); $result = $sth->fetchAll(); print_r($result); ?> 

$ f-> fetch () перемещает внутренний указатель результата на следующее значение (если существует), поэтому вы получаете все значения, когда вы вызываете его while ();

$f->fetch() – получит 1 строку

$f->fetchAll() – получит все строки