PDOStatement::fetchAll

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)

PDOStatement::fetchAllВыбирает строки, которые остались в наборе результатов

Описание

public PDOStatement::fetchAll(int $mode = PDO::FETCH_DEFAULT): array
public PDOStatement::fetchAll(int $mode = PDO::FETCH_COLUMN, int $column): array
public PDOStatement::fetchAll(int $mode = PDO::FETCH_CLASS, string $class, ?array $constructorArgs): array
public PDOStatement::fetchAll(int $mode = PDO::FETCH_FUNC, callable $callback): array

Список параметров

mode

Режим управляет содержанием массива, который вернёт метод, как задокументировали в описании метода PDOStatement::fetch(). Параметр принимает значение по умолчанию, которое определяет константа PDO::ATTR_DEFAULT_FETCH_MODE, значение по умолчанию которой определяет константа PDO::FETCH_BOTH.

В параметр передают константу PDO::FETCH_COLUMN, чтобы извлечь значения только одного столбца. Параметром column задают столбец, данные которого требуется извлечь.

Название столбца помещают первым в списке столбцов SQL-запроса и указывают флаг PDO::FETCH_UNIQUE, чтобы проиндексировать массив с результатами по значению конкретного столбца, а не по последовательным числам. Часть данных из столбцов с неуникальными значениями потеряется.

Название столбца помещают первым в списке столбцов SQL-запроса и указывают флаг PDO::FETCH_GROUP, чтобы сгруппировать результаты в виде 3-мерного массива, который БД проиндексирует по значениям заданного столбца.

Для группировки результатов в виде 2-мерного массива флаги PDO::FETCH_GROUP и PDO::FETCH_COLUMN указывают через побитовое ИЛИ. Результаты сгруппируются по первому столбцу, при этом значениями элементов массива будут массивы со списком записей из второго столбца, которые соответствуют записям первого.

Дальше идут динамические параметры, которые зависят от режима выборки. Эти параметры нельзя использовать с именованными параметрами.
column

Аргумент для этого параметра передают при выборке в режиме PDO::FETCH_COLUMN. Параметр возвращает столбец по индексу, которые начинаются с 0.

class

Аргумент для этого параметра передают при выборке в режиме PDO::FETCH_CLASS. Параметр сопоставляет столбцы строк с названиями свойств класса и возвращает экземпляры класса.

constructorArgs

Параметр принимает аргументы для конструктора пользовательского класса, когда через параметр mode установили режим выборки PDO::FETCH_CLASS.

callback

Аргумент для этого параметра передают при выборке в режиме PDO::FETCH_FUNC. Параметр передаёт столбцы строк как аргументы функции обратного вызова и возвращает результаты вызова функции.

Возвращаемые значения

Метод PDOStatement::fetchAll() возвращает массив со строками, которые остались в наборе результатов. Массив представляет каждую строку либо как массив значений столбцов, либо как объект, названия свойств которого соответствуют названиям столбцов.

При извлечении наборов результатов с большим количеством строк метод серьёзно нагружает систему и, возможно, ресурсы сети. Наборы результатов лучше обрабатывать средствами СУБД, чем извлекать все данные и обрабатывать набор результатов в PHP. В языке запросов SQL, например, пользуются условиями WHERE и ORDER BY, чтобы ограничить выборку результатов перед извлечением и обработкой в PHP.

Ошибки

Метод выдаёт ошибку уровня E_WARNING, если для атрибута PDO::ATTR_ERRMODE установили режим PDO::ERRMODE_WARNING.

Метод выбрасывает исключение PDOException, если для атрибута PDO::ATTR_ERRMODE установили режим PDO::ERRMODE_EXCEPTION.

Список изменений

Версия Описание
8.0.0 Теперь метод каждый раз возвращает массив (array), раньше иногда возвращалось false, если возникала ошибка.

Примеры

Пример #1 Пример извлечения строк, которые остались в наборе результатов

<?php

$sth
= $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();

/* Извлекаем строки, которые остались в наборе результатов */
print "Извлечение строк, которые остались в наборе результатов:\n";
$result = $sth->fetchAll();
print_r($result);

?>

Вывод приведённого примера будет похож на:

Извлечение строк, которые остались в наборе результатов:
Array
(
    [0] => Array
        (
            [name] => apple
            [0] => apple
            [colour] => red
            [1] => red
        )

    [1] => Array
        (
            [name] => pear
            [0] => pear
            [colour] => green
            [1] => green
        )

    [2] => Array
        (
            [name] => watermelon
            [0] => watermelon
            [colour] => pink
            [1] => pink
        )
)

Пример #2 Пример извлечения значений одного столбца из набора результатов

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

<?php

$sth
= $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();

/* Извлекаем значения первого столбца */
$result = $sth->fetchAll(PDO::FETCH_COLUMN, 0);
var_dump($result);
?>

Вывод приведённого примера будет похож на:

Array(3)
(
    [0] =>
    string(5) => apple
    [1] =>
    string(4) => pear
    [2] =>
    string(10) => watermelon
)

Пример #3 Пример группировки строк по значениям одного столбца

Следующий пример показывает, как получить ассоциативный массив строк набора результатов, которые метод сгруппировал по значениям столбца. Массив содержит три ключа: значения apple и pear — массивы, каждое из которых содержит два разных цвета; а ключ watermelon будет массивом только с одним цветом.

<?php

$insert
= $dbh->prepare("INSERT INTO fruit(name, colour) VALUES (?, ?)");
$insert->execute(array('apple', 'green'));
$insert->execute(array('pear', 'yellow'));

$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();

/* Группируем записи по значениям первого столбца */
var_dump($sth->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP));

?>

Вывод приведённого примера будет похож на:

array(3) {
  ["apple"]=>
  array(2) {
    [0]=>
    string(5) "green"
    [1]=>
    string(3) "red"
  }
  ["pear"]=>
  array(2) {
    [0]=>
    string(5) "green"
    [1]=>
    string(6) "yellow"
  }
  ["watermelon"]=>
  array(1) {
    [0]=>
    string(5) "pink"
  }
}

Пример #4 Создание объекта для каждой строки

Следующий пример показывает поведение метода в режиме выборки PDO::FETCH_CLASS.

<?php

class fruit
{
public
$name;
public
$colour;
}

$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();

$result = $sth->fetchAll(PDO::FETCH_CLASS, "fruit");
var_dump($result);

?>

Вывод приведённого примера будет похож на:

array(3) {
  [0]=>
  object(fruit)#1 (2) {
    ["name"]=>
    string(5) "apple"
    ["colour"]=>
    string(5) "green"
  }
  [1]=>
  object(fruit)#2 (2) {
    ["name"]=>
    string(4) "pear"
    ["colour"]=>
    string(6) "yellow"
  }
  [2]=>
  object(fruit)#3 (2) {
    ["name"]=>
    string(10) "watermelon"
    ["colour"]=>
    string(4) "pink"
  }
  [3]=>
  object(fruit)#4 (2) {
    ["name"]=>
    string(5) "apple"
    ["colour"]=>
    string(3) "red"
  }
  [4]=>
  object(fruit)#5 (2) {
    ["name"]=>
    string(4) "pear"
    ["colour"]=>
    string(5) "green"
  }
}

Пример #5 Пример вызова функции для каждой строки

Следующий пример показывает поведение метода в режиме выборки PDO::FETCH_FUNC.

<?php

function fruit($name, $colour)
{
return
"{$name}: {$colour}";
}

$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();

$result = $sth->fetchAll(PDO::FETCH_FUNC, "fruit");
var_dump($result);

?>

Вывод приведённого примера будет похож на:

array(3) {
  [0]=>
  string(12) "apple: green"
  [1]=>
  string(12) "pear: yellow"
  [2]=>
  string(16) "watermelon: pink"
  [3]=>
  string(10) "apple: red"
  [4]=>
  string(11) "pear: green"
}

Смотрите также

  • PDO::query() - Подготавливает и выполняет выражение SQL без заполнителей
  • PDOStatement::fetch() - Извлекает следующую строку из результирующего набора
  • PDOStatement::fetchColumn() - Возвращает данные одного столбца следующей строки результирующего набора
  • PDO::prepare() - Подготавливает запрос к выполнению и возвращает связанный с этим запросом объект
  • PDOStatement::setFetchMode() - Устанавливает режим выборки по умолчанию для объекта запроса