PDOStatement::fetchAll
(PHP 5 >= 5.1.0, PHP 7, PECL pdo >= 0.1.0)
PDOStatement::fetchAll — Возвращает массив, содержащий все строки результирующего набора
Описание
$fetch_style
= ?
, mixed $fetch_argument
= ?
, array $ctor_args
= array()
) : arrayСписок параметров
-
fetch_style
-
Определяет содержимое возвращаемого массива. Подробней можно узнать из документации к методу PDOStatement::fetch(). По умолчанию параметр принимает значение
PDO::ATTR_DEFAULT_FETCH_MODE
(которое в свою очередь имеет умолчаниеPDO::FETCH_BOTH
)Чтобы извлечь значения только одного столбца, передайте в качестве значения этого параметра константу
PDO::FETCH_COLUMN
. С помощью параметраfetch_argument
можно задать столбец, из которого требуется извлечь данные.Если требуется извлечь только уникальные строки одного столбца, нужно передать побитовое ИЛИ констант
PDO::FETCH_COLUMN
иPDO::FETCH_UNIQUE
.Чтобы получить ассоциативный массив строк сгруппированный по значениям определенного столбца, нужно передать побитовое ИЛИ констант
PDO::FETCH_COLUMN
иPDO::FETCH_GROUP
. -
fetch_argument
-
Смысл этого аргумента зависит от значения параметра
fetch_style
:-
PDO::FETCH_COLUMN
: Будет возвращен указанный столбец. Индексация столбцов начинается с 0. -
PDO::FETCH_CLASS
: Будет создан и возвращен новый объект указанного класса. Свойствам объекта будут присвоены значения столбцов, имена которых совпадут с именами свойств. -
PDO::FETCH_FUNC
: Будут возвращены результаты вызовов указанной функции. Данные каждой строки результирующего набора будут передаваться в эту функцию.
-
-
ctor_args
-
Аргументы конструктора класса. Для случаев, когда параметру
fetch_style
присвоено значениеPDO::FETCH_CLASS
.
Возвращаемые значения
PDOStatement::fetchAll() возвращает массив, содержащий все оставшиеся строки результирующего набора. Массив представляет каждую строку либо в виде массива значений одного столбца, либо в виде объекта, имена свойств которого совпадают с именами столбцов.
Использование этого метода для извлечения строк больших результирующих наборов может пагубно сказаться на производительности системы и сетевых ресурсов. Вместо извлечения всех данных и их обработки в PHP рекомендуется использовать встроенные средства СУБД. Например, использование выражений WHERE и ORDER BY языка SQL может уменьшить размеры результирующего набора.
Примеры
Пример #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
- PDOStatement::fetch() - Извлечение следующей строки из результирующего набора
- PDOStatement::fetchColumn() - Возвращает данные одного столбца следующей строки результирующего набора
- PDO::prepare() - Подготавливает запрос к выполнению и возвращает связанный с этим запросом объект
- PDOStatement::setFetchMode() - Устанавливает режим выборки по умолчанию для объекта запроса