2013-06-04 2 views
2

У меня есть этот кодпринести в 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 
) 

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

+1

выборки использовали быть выборки по одной строке за раз. Вы можете использовать fetch в loop или user fetchAll, как говорят другие, чтобы получить все строки. –

ответ

5

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); 
} 
?> 
2

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

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

PDOStatement: получать только извлекает одну запись из объекта PDOStatement (там, где это указатель), поэтому вам придется перебрать принести

0

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

Возможно попробовать другой метод, как 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); 
?> 
0

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

0

$f->fetch() - Получит ряд

$f->fetchAll() - Получит Все строки