2

我有这个代码:

$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
)

它有一个结果,但我在表中有两行;这是为什么?

4

6 回答 6

5

应该使用 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);
    }
?>
于 2013-06-04T11:02:19.850 回答
2

在这种情况下使用fetchAll

$result = $f->fetchAll();
print_r($result);
于 2013-06-04T10:59:12.500 回答
0

fetch()方法只返回一条记录,并将内部指针设置为指向下一条记录。你期望从这个方法中它不能返回什么。

也许尝试不同的方法,如fetchAll

<?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);
?>
于 2013-06-04T11:01:10.390 回答
0

$f->fetch()将内部结果指针移动到下一个值(如果存在)。这就是为什么当你调用它时你会得到所有的值while();

于 2013-06-04T11:01:51.173 回答
0

$f->fetch()- 将获得

$f->fetchAll()- 将获得所有

于 2013-06-04T11:03:02.353 回答
0

PDOStatement::fetch仅从PDOStatement对象(无论其指针在哪里)中检索一条记录,这就是您必须遍历fetch的原因。

于 2013-06-04T10:59:32.853 回答