Чат PHP-разработчиков
Логические задачи с собеседований
Класс для работы с базой данных

Класс для работы с базой данных

В этом уроке мы с вами научимся работать с базой данных в ООП-стиле. Как мы с вами уже говорили в уроке о взаимодействии PHP и MySQL, в современном PHP для работы с базами данных принято использовать PDO.

Так как мы учимся работать в ООП-стиле, то, как вы уже наверное догадались, мы будем использовать для соединения и работы с базой данных специальный класс. Давайте создадим в нашем проекте папку src/MyProject/Services и внутри неё создадим класс Db.php
src/MyProject/Services/Db.php

Код доступен только после покупки курса ООП в PHP.

Давайте также создадим файл с настройками для подключения к базе данных. Он будет представлять собой простой массив.
src/settings.php

Код доступен только после покупки курса ООП в PHP.

Если у вас как и у меня установлен OpenServer, то настройки будут такими же. Иначе – задавайте здесь свои настройки.

Теперь давайте в конструкторе нашего класса установим соединение с базой данных. Мы будем работать через PDO, подробнее об этом читайте в статье Взаимодействие PHP и MySQL.
src/MyProject/Services/Db.php

Код доступен только после покупки курса ООП в PHP.

Свойство $this->pdo теперь можно использовать для работы с базой данных через PDO. Давайте напишем отдельный метод для выполнения запросов в базу.

Код доступен только после покупки курса ООП в PHP.

Всё, класс для работы с базой данных готов. Давайте теперь попробуем его использовать для вывода статей на сайте прямо из базы.
src/MyProject/Controllers/MainController.php

Код доступен только после покупки курса ООП в PHP.

Давайте посмотрим на результат.

Статьи в виде массива

То есть сейчас $articles – это массив с двумя вложенными элементами-массивами, представляющих собой статьи из базы данных.

Наш класс для работы с базой данных готов. В следующем уроке мы начнём его использовать для вывода статей на сайте.

Читайте также
Комментарии


rusgil
rusgil

Каждый раз при обращении к БД устанавливается кодировка:

$this->pdo->exec('SET NAMES UTF8');

Зачем это нужно? Если таблицы в БД уже в UTF-8. Или это проверка на случай, если таблицы в другой кодировке? Поясните, пожалуйста, подробнее про кодировки и зачем это делается.
Спасибо.

ivashkevich
ivashkevich

Это задаётся кодировка не для самой базы данных, а для соединения, в рамках которого мы будем с базой данных работать. В зависимости от ОС, на которой запущен сервер и дополнительной конфигурации, эта кодировка может отличаться. Нам важно чтобы наш клиент работал с базой в той же кодировке, что и сама база. Иначе мы в результате запросов будем получать кракозябры.

ArtemijeKA
ArtemijeKA

Спасибо.

ArtemijeKA
ArtemijeKA

У меня такой вопрос:
Почему мы используем fetchAll который выводит и индексы и ключи?
Не лучше ли доставать либо только ключи либо только индексы?

ivashkevich
ivashkevich

Лучше) Можете сюда написать, как Вы улучшили.

Todd
Todd

http://prntscr.com/lg1k1z тут наверно символ ? лишний

ivashkevich
ivashkevich

Нет, это значит либо массив может вернуться, либо null.

Todd
Todd

странно, почему то у меня ругается, говорит синтаксическая ошибка (Parse error: syntax error, unexpected '?' in C:\OpenServer\domains\test\app\Services\Db.php on line 24)

ivashkevich
ivashkevich

PHP какая версия?

Todd
Todd

виноват, версия была 7, надо было повыше поставить , спасибо)

ivashkevich
ivashkevich

Не за что)