У меня есть этот код
$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 () ;
Измените свой пример на:
<?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()
– получит все строки