(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)
PDOStatement::fetchAll — Выбирает строки, которые остались в наборе результатов
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" }