Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Общие принципы работы PHP PDO: Работа с базой данных

Перед тем, как погружаться в различные элементы PDO, мы сначала рассмотрим общий принцип работы, который будет одинаков для любых запросов. Эти принципы включают такие пункты:

  • Установка зависимостей
  • Подключение к базе данных
  • Подготовка запроса
  • Выполнение запроса
  • Формирование результата

В этом курсе мы будем работать с базой данных SQLite. Она полноценно работает с SQL, но у нее есть одно отличие — у нее нет сервера. Данные она хранит в обычных файлах на диске или вообще в памяти. Это удобно для обучения и тестирования. При необходимости вы с легкостью можете заменить ее на любую полнофункциональную базу.

PDO представляет собой интерфейс взаимодействия с базами данных в PHP и сам по себе не позволяет манипулировать доступом к базе. Чтобы воспользоваться возможностями PDO, необходимо использовать соответствующий конкретной базе данных PDO драйвер. Драйвер реализует этот интерфейс и предоставляет специфичный для базы данных функционал

Чтобы начать работать, вам потребуется установить PDO и драйвер SQLlite. Сделать это можно по нашей инструкции. Чтобы подключится к другой базе данных, нужно будет по аналогии установить соответствующий драйвер

Далее в уроке мы рассмотрим основной принцип работы с PDO на примере работы с таблицей пользователя. Для начала создадим таблицу в коде, заполним ее и выведем ее данные в консоль:

<?php

// Создаем соединение с базой данных в памяти
$conn = new PDO('sqlite::memory:');
// Настраиваем получение данных в виде аасоциативного массива
$conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

// Создаем таблицу users
$sql = "CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT, phone TEXT)";
$conn->exec($sql);

// Вставляем данные в таблицу users
$sql2 = "INSERT INTO users (username, phone) VALUES ('tommy', '123456789')";
$conn->exec($sql2);

// Выбираем данные из таблицы users
$sql3 = "SELECT * FROM users";
$stmt = $conn->query($sql3);
$result = $stmt->fetchAll();

// Выводим результаты запроса
print_r($result);

Соединение с базой данных

Обычно программисты делают так: рядом со своим приложением они поднимают СУБД, внутри которой они заранее создали необходимую базу данных. Таким образом, приложение соединяется с СУБД и подключается к конкретной базе данных внутри. Для этого нужны параметры подключения:

  • IP-адрес или DNS-адрес
  • Порт для подключения
  • Логин и пароль
  • Имя базы данных

В нашем примере все проще. База SQLite запускается прямо в памяти нашего приложения, поэтому ей не нужны доступы. Эту базу не нужно создавать заранее, она создается в момент выполнения соединения:

$conn = new PDO('sqlite::memory:');

Дальше мы можем работать с базой SQLite с помощью SQL.

Здесь все как с обычной реляционной базой данных. Но важно помнить, что эта база существует, только когда приложение запущено. Если мы остановим или перезапустим приложение, это приведет к потере данных. Это нормально для учебных и тестовых задач, но не подходит для реальных приложений, поэтому в них база в памяти не используется.

Выполнение запросов

В примере выше мы выполняем все базовые операции по работе с сущностью — создание таблицы, вставка в нее данных и выборка. Запросы на создание таблиц и на вставку данных выполняются при помощи метода exec(). Этот метод выполняет SQL-запрос, который не возвращает никаких данных. Запрос на выборку выполняется при помощи метода query()

$sql3 = "SELECT * FROM users";
$stmt = $conn->query($sql3);

Результат выполнения запросов

Метод query() возвращает объект класса PDOStatement, который представляет собой подготовленный запрос к базе данных, а после выполнения запроса соответствующий набор результатов

$result = $stmt->fetchAll();
print_r($result);

При помощи метода fetchAll(), который выбирает оставшиеся строки из набора результатов, мы получаем данные в виде ассоциативного массива. В этом массиве ключи — названия столбцов таблицы, а значения — данные из этих столбцов.

Array
(
    [0] => Array
        (
            [id] => 1
            [username] => tommy
            [phone] => 123456789
        )
)

Самостоятельная работа

Выполните все шаги из этого урока локально у себя


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

  1. PHP Data Objects

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

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

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

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

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

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

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

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

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

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

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Занимайтесь созданием сайтов, веб-приложений, сервисов и их интеграцией с внутренними бизнес-системами на бекенд-языке PHP
10 месяцев
с нуля
Старт 28 ноября

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

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

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

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

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу