PDOStatement::fetchAll
Справочное руководство по PHP PDO
PDOStatement::fetchAll — Возвращает массив, содержащий все строки результирующего набора (PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
Описание
Синтаксис
array PDOStatement::fetchAll ([ int $fetch_style [, mixed $fetch_argument [, array $ctor_args = array() ]]] )
Parameters
fetch_style
Управляет тем, как следующая строка будет возвращена вызывающей стороне. Это значение должно быть одной из констант PDO::FETCH_*, по умолчанию принимает значение PDO::ATTR_DEFAULT_FETCH_MODE (по умолчанию — PDO::FETCH_BOTH).
Чтобы вернуть массив, содержащий все значения одного столбца из результирующего набора, укажите PDO::FETCH_COLUMN. Выберите нужный столбец, указав параметр column-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("SELECT name, colour FROM fruit");
$sth->execute();
/* 获取结果集中所有剩余的行 */
print("Fetch all of the remaining rows in the result set:\n");
$result = $sth->fetchAll();
print_r($result);
?>
Приведённый выше пример выведет:
Fetch all of the remaining rows in the result set:
Array
(
[0] => Array
(
[NAME] => pear
[0] => pear
[COLOUR] => green
[1] => green
)
[1] => Array
(
[NAME] => watermelon
[0] => watermelon
[COLOUR] => pink
[1] => pink
)
)
Извлечь все значения одного столбца из результирующего набора
В следующем примере показано, как вернуть все значения одного столбца из результирующего набора, даже если сам SQL-запрос может возвращать несколько столбцов на строку.
<?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
)
Сгруппировать все значения по одному столбцу
В следующем примере показано, как вернуть ассоциативный массив, сгруппированный по значениям указанного столбца в результирующем наборе. Массив содержит три ключа: возвращённые массивы 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) "green"
}
}
Создаёт экземпляр класса для каждой строки результатов
В следующем примере показано поведение стиля выборки 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"
}
}
Вызывает функцию для каждой строки
В следующем примере показано поведение стиля выборки 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"
}
Другие расширения