PDOStatement::fetchAll — Возвращает массив, содержащий все строки в наборе результатов (PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
array PDOStatement::fetchAll ([ int $fetch_style [, смешанный $fetch_argument [, массив $ctor_args = array() ]]] )
выборка_стиля
Управляет тем, как следующая строка возвращается вызывающему объекту. Это значение должно быть одной из констант серии PDO::FETCH_*, а значением по умолчанию является значение PDO::ATTR_DEFAULT_FETCH_MODE (по умолчанию — PDO::FETCH_BOTH).
Чтобы вернуть массив, содержащий все значения одного столбца в наборе результатов, укажите PDO::FETCH_COLUMN. Получите нужный столбец, указав параметр columns-index.
Чтобы получить уникальное значение одного столбца в наборе результатов, вам необходимо выполнить побитовое ИЛИ 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 для уточнения результатов перед получением данных и их обработкой с помощью PHP.
<?php$sth = $dbh->prepare("ВЫБЕРИТЕ имя, цвет ИЗ фруктов");$sth->execute();/* Получить все оставшиеся строки в наборе результатов*/print("Выбрать все оставшиеся строки в наборе результатов:n");$result = $sth->fetchAll();print_r($result);?>
Вывод приведенного выше примера:
Получите все оставшиеся строки в наборе результатов: Array( [0] => Array ( [NAME] => груша [0] => груша [ЦВЕТ] => зеленый [1] => зеленый ) [1] => Массив ( [ИМЯ] => арбуз [0] => арбуз [ЦВЕТ] => розовый [1] => розовый ))
В следующем примере показано, как вернуть все значения одного столбца из набора результатов, хотя сам оператор SQL может возвращать несколько столбцов в строке.
<?php$sth = $dbh->prepare("ВЫБЕРИТЕ имя, цвет ИЗ фруктов");$sth->execute();/* Получить все значения в первом столбце*/$result = $sth-> fetchAll(PDO ::FETCH_COLUMN, 0);var_dump($result);?>
Вывод приведенного выше примера:
Массив(3)([0] => строка(5) => яблоко [1] => строка(4) => груша [2] => строка(10) => арбуз)
В следующем примере показано, как вернуть ассоциативный массив, сгруппированный по значениям указанного столбца в наборе результатов. Массив содержит три ключа: возвращаемые массивы яблок и груш содержат два разных цвета, а возвращаемый массив арбуза содержит только один цвет.
<?php$insert = $dbh->prepare("INSERT INTO Fruit(name, color) VALUES (?, ?)");$insert->execute(array('apple', 'green'));$insert ->execute(array('pear', 'yellow'));$sth = $dbh->prepare("ВЫБРАТЬ имя, цвет ИЗ Fruit");$sth->execute();/* Группа на основе первого столбца*/var_dump($sth->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP));?>
Вывод приведенного выше примера:
array(3) { ["apple"]=> array(2) { [0]=> string(5) "зеленый" [1]=> string(3) "красный" } ["груша"]=> массив (2) { [0]=> строка(5) "зеленый" [1]=> строка(6) "желтый" } ["арбуз"]=> массив(1) { [0]=> строка(5) "зеленый" }}
В следующем примере демонстрируется поведение стиля получения PDO::FETCH_CLASS.
<?phpclass Fruit { public $name; public $color;}$sth = $dbh->prepare("ВЫБЕРИТЕ имя, цвет ИЗ фруктов");$sth->execute();$result = $sth->fetchAll( PDO::FETCH_CLASS, "фрукты");var_dump($result);?>
Вывод приведенного выше примера:
array(3) { [0]=> объект(фрукты)#1 (2) { ["имя"]=> строка(5) "яблоко" ["цвет"]=> строка(5) "зеленый" } [ 1]=> объект(фрукт)#2 (2) { ["имя"]=> строка(4) "груша" ["цвет"]=> строка(6) "желтый" } [2]=> объект( фрукты)#3 (2) { ["имя"]=> string(10) "арбуз" ["цвет"]=> string(4) "розовый" }}
Следующий пример демонстрирует поведение стиля получения PDO::FETCH_FUNC.
<?phpfunction Fruit($name, $color) { return "{$name}: {$color}";}$sth = $dbh->prepare("ВЫБЕРИТЕ имя, цвет ИЗ фруктов");$sth->execute ();$result = $sth->fetchAll(PDO::FETCH_FUNC, "фрукты");var_dump($result);?>
Вывод приведенного выше примера:
array(3) { [0]=> string(12) "apple: green" [1]=> string(12) "груша: желтый" [2]=> string(16) "арбуз: розовый"}