Для работы с результатами запроса используется объект класса PDOStatement
. Объект этого класса представляет собой сначала подготовленный запрос, а после выполнения запроса в базу — набор результатов выполнения
$sql3 = "SELECT * FROM users";
$stmt = $conn->query($sql3);
$stmt->fetchAll();
Для получения результатов после выполнения запроса используются следующие методы:
fetchAll()
— Выбирает все оставшиеся строки из набора результатовfetch()
— Выбирает только одну следующую строку из набора результатов
Получение всех данных
Получить сразу все оставшиеся строки из набора результатов можно при помощи метода fetchAll()
. Результат будет получен в виде массива
$sql3 = "SELECT * FROM users";
$stmt = $conn->query($sql3);
$stmt->fetchAll();
Метод fetchAll()
может принимать параметр — константу, который определяет, как будут представлены данные
$stmt->fetchAll(PDO::FETCH_ASSOC);
PDO::FETCH_ASSOC
указывает, что каждая строка результирующего набора должна быть ассоциативным массивом, индексы которого соответствуют именам столбцов результата выборки
Получение данных построчно
Метод fetch()
позволяет получать данные из набора результатов построчно. При использовании этого метода объект PDOStatement
выполняют роль курсора — указателя на набор данных, хранящихся в памяти в базе. Другими словами, это не набор извлеченных данных из базы, это всего лишь указатель на них. Курсор может последовательно перебирать данные при помощи метода fetch()
. Каждый следующий вызов этого метода приводит к тому, что содержимое объекта подменяется новой порцией данных от СУБД.
Метод также принимает параметр, который определяет, в каком виде будет возвращена очередная строка из набора. При использовании PDO::FETCH_ASSOC
результат будет возвращен в виде ассоциативного массива. В случае, если строк в наборе больше нет, метод возвращает false
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
print_r($row);
}
Представление данных в виде ассоциативного массива используется чаще всего. Поэтому обычно этот режим работы указывают сразу в опциях соединения с базой данных:
$conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
Самостоятельная работа
- Выполните шаги из урока у себя на компьютере. Попробуйте выбирать данные построчно
Помимо методов fetchAll()
и fetch()
иногда удобно использовать метод fetchColumn()
, который позволяет получить данные только одного столбца следующей строки результирующего набора. Его удобно использовать при получении результатов применения какой-нибудь агрегатной функции в SQL, например среднего или максимального значения столбца. Изучите документацию на этот метод
Подготовьте запрос, содержащий агрегирующую функцию, например такой:
SELECT MAX(id) from users;
Выполните его и получите результат при помощи метода
fetch()
иfetchColumn()
. Сравните полученные результаты
Дополнительные материалы
![Аватары экспертов Хекслета](https://cdn2.hexlet.io/assets/faces/mentors-756ab67c814cd4c22715666812a66c9dac9ac2d20176a10b0e932ee851a918e0.png)
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар «Как самостоятельно учиться»
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.