Зарегистрируйтесь, чтобы продолжить обучение

Результат запроса в базу данных PHP PDO: Работа с базой данных

Для работы с результатами запроса используется объект класса 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(). Сравните полученные результаты


Дополнительные материалы

  1. Документация PDOStatement

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»