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.
Примеры
Пример #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"
}