PDO 中的 'fetch' 只得到一个结果

2021-12-26 00:00:00 database php mysql 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
)

这就是我真正想要的.但是如果我这样做

And that's what I really want. But if I do this

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

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

It has one result, but I have two rows in the table; why is that?

推荐答案

应该使用 Fetch 来显示数据库结果中的下一行.

Fetch should be used to display the next row from the database result.

要获取所有行,您应该使用 fetchAll();

To get all rows, you should use fetchAll();

  • PDOStatement::fetch — 从结果集
  • PDOStatement::fetchAll() — 返回包含结果集的所有行
  • PDOStatement::fetch — Fetches the next row from a result set
  • PDOStatement::fetchAll() — Returns an array containing all of the result set rows

将您的示例更改为:

<?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 来

or if you want use PDOStatement::fetch to

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

相关文章