PDOStatement::fetchAll

PHP PDO 参考手册Справочное руководство по 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"
}

PHP PDO 参考手册Справочное руководство по PHP PDO

Другие расширения