Todos os registros do resultado no PDO em PHP

É possível obter imediatamente um array com todos os registros do resultado de uma consulta. Isso é feito usando o método fetchAll. Vamos analisar os vários modos de funcionamento deste método. Todos os exemplos serão para a tabela de teste.

Obtendo um array simples

Vamos aplicar o método fetchAll para obter um array simples de dados. Para isso, deixaremos os parâmetros do método vazios:

php<?php
  $res = $pdo->query('SELECT * FROM users');
  
  $row = $res->fetchAll();
  var_dump($row);
?>

Resultado da execução do código:

php[
  [
    'id'     => 1,
    'name'   => 'name1',
    'age'    => 21,
    'salary' => 500,
  ],
  [
    'id'     => 2,
    'name'   => 'name2',
    'age'    => 22,
    'salary' => 600,
  ],
  [
    'id'     => 3,
    'name'   => 'name3',
    'age'    => 23,
    'salary' => 600,
  ],
  [
    'id'     => 4,
    'name'   => 'name4',
    'age'    => 24,
    'salary' => 700,
  ],
  [
    'id'     => 5,
    'name'   => 'name5',
    'age'    => 25,
    'salary' => 800,
  ],
]

Obtendo uma única coluna

Vamos obter apenas uma coluna da tabela. Para isso, passaremos para o método fetchAll o parâmetro FETCH_COLUMN:

php<?php
  $res = $pdo->query('SELECT name FROM users');
  
  $row = $res->fetchAll(PDO::FETCH_COLUMN);
  var_dump($row);
?>

Resultado da execução do código:

php[
  'name1',
  'name2',
  'name3',
  'name4',
  'name5',
]

Obtendo par chave-valor

Vamos obter os dados na forma de par chave-valor, onde a chave será o id, e o valor será o nome do usuário. Para isso, no parâmetro do método fetchAll passaremos o modo FETCH_KEY_PAIR:

php<?php
  $res = $pdo->query('SELECT id, name FROM users');
  
  $row = $res->fetchAll(PDO::FETCH_KEY_PAIR);
  var_dump($row);
?>

Resultado da execução do código:

php[
  1 => 'name1',
  2 => 'name2',
  3 => 'name3',
  4 => 'name4',
  5 => 'name5',
]

Obtendo registros com um campo único

Pode-se fazer com que um campo único (geralmente o id) se torne a chave para cada subarray:

php<?php
  $res = $pdo->query('SELECT * FROM users');
  
  $row = $res->fetchAll(PDO::FETCH_UNIQUE);
  var_dump($row);
?>

Resultado da execução do código:

php[
  1 => [
    'id'     => 1,
    'name'   => 'name1',
    'age'    => 21,
    'salary' => 500,
  ],
  2 => [
    'id'     => 2,
    'name'   => 'name2',
    'age'    => 22,
    'salary' => 600,
  ],
  3 => [
    'id'     => 3,
    'name'   => 'name3',
    'age'    => 23,
    'salary' => 600,
  ],
  4 => [
    'id'     => 4,
    'name'   => 'name4',
    'age'    => 24,
    'salary' => 700,
  ],
  5 => [
    'id'     => 5,
    'name'   => 'name5',
    'age'    => 25,
    'salary' => 800,
  ],
]

Exercícios práticos

Задание 1

Exiba todos os usuários da tabela users, usando o método descrito na lição.

Задание 2

Exiba um único registro de dados da tabela users.

Задание 3

Exiba o nome e a idade dos usuários na forma de par chave-valor.