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
можно задать столбец, из
которого требуется извлечь данные.
Если требуется извлечь только уникальные строки одного столбца, нужно
передать побитовое ИЛИ констант PDO::FETCH_COLUMN
и
PDO::FETCH_UNIQUE
.
Чтобы получить ассоциативный массив строк сгруппированный по значениям
определённого столбца, нужно передать побитовое ИЛИ констант
PDO::FETCH_COLUMN
и PDO::FETCH_GROUP
.
Следующие параметры являются динамическими и зависят от режима выборки.
Они не могут использоваться совместно с именованными параметрами.
-
column
-
Используется с PDO::FETCH_COLUMN
.
Возвращает указанный столбец с индексом, начинающимся с 0.
-
class
-
Используется с PDO::FETCH_CLASS
.
Возвращает экземпляры указанного класса, сопоставляя
столбцы каждой строки с именованными свойствами класса.
-
constructorArgs
-
Аргументы конструктора пользовательского класса,
когда параметр mode
равен PDO::FETCH_CLASS
.
-
callback
-
Используется с PDO::FETCH_FUNC
.
Возвращает результаты вызова указанной функции,
используя столбцы каждой строки в качестве параметров вызова.
Возвращаемые значения
PDOStatement::fetchAll() возвращает массив, содержащий все
оставшиеся строки результирующего набора. Массив представляет каждую строку
либо в виде массива значений одного столбца, либо в виде объекта, имена свойств
которого совпадают с именами столбцов.
Использование этого метода для извлечения строк больших результирующих
наборов может пагубно сказаться на производительности системы и сетевых
ресурсов. Вместо извлечения всех данных и их обработки в PHP рекомендуется
использовать встроенные средства СУБД. Например, использование выражений
WHERE и ORDER BY языка SQL может уменьшить размеры результирующего набора.
Ошибки
Выдаёт ошибку уровня E_WARNING
, если атрибуту PDO::ATTR_ERRMODE
установлено значение PDO::ERRMODE_WARNING
.
Выбрасывает исключение PDOException, если атрибуту PDO::ATTR_ERRMODE
установлено значение PDO::ERRMODE_EXCEPTION
.
Примеры
Пример #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"
}