Класс для работы с базой данных
В этом уроке мы с вами научимся работать с базой данных в ООП-стиле. Как мы с вами уже говорили в уроке о взаимодействии PHP и MySQL, в современном PHP для работы с базами данных принято использовать PDO.
Так как мы учимся работать в ООП-стиле, то, как вы уже наверное догадались, мы будем использовать для соединения и работы с базой данных специальный класс. Давайте создадим в нашем проекте папку src/MyProject/Services и внутри неё создадим класс Db.php
src/MyProject/Services/Db.php
<?php
namespace MyProject\Services;
class Db
{
}
Давайте также создадим файл с настройками для подключения к базе данных. Он будет представлять собой простой массив.
src/settings.php
<?php
return [
'db' => [
'host' => 'localhost',
'dbname' => 'my_project',
'user' => 'root',
'password' => '',
]
];
Если у вас как и у меня установлен OpenServer, то настройки будут такими же. Иначе – задавайте здесь свои настройки.
Теперь давайте в конструкторе нашего класса установим соединение с базой данных. Мы будем работать через PDO, подробнее об этом читайте в статье Взаимодействие PHP и MySQL.
src/MyProject/Services/Db.php
<?php
namespace MyProject\Services;
class Db
{
/** @var \PDO */
private $pdo;
public function __construct()
{
$dbOptions = (require __DIR__ . '/../../settings.php')['db'];
$this->pdo = new \PDO(
'mysql:host=' . $dbOptions['host'] . ';dbname=' . $dbOptions['dbname'],
$dbOptions['user'],
$dbOptions['password']
);
$this->pdo->exec('SET NAMES UTF8');
}
}
Свойство $this->pdo теперь можно использовать для работы с базой данных через PDO. Давайте напишем отдельный метод для выполнения запросов в базу.
<?php
namespace MyProject\Services;
class Db
{
/** @var \PDO */
private $pdo;
public function __construct()
{
$dbOptions = (require __DIR__ . '/../../settings.php')['db'];
$this->pdo = new \PDO(
'mysql:host=' . $dbOptions['host'] . ';dbname=' . $dbOptions['dbname'],
$dbOptions['user'],
$dbOptions['password']
);
$this->pdo->exec('SET NAMES UTF8');
}
public function query(string $sql, $params = []): ?array
{
$sth = $this->pdo->prepare($sql);
$result = $sth->execute($params);
if (false === $result) {
return null;
}
return $sth->fetchAll();
}
}
Всё, класс для работы с базой данных готов. Давайте теперь попробуем его использовать для вывода статей на сайте прямо из базы.
src/MyProject/Controllers/MainController.php
<?php
namespace MyProject\Controllers;
use MyProject\Services\Db;
use MyProject\View\View;
class MainController
{
/** @var View */
private $view;
/** @var Db */
private $db;
public function __construct()
{
$this->view = new View(__DIR__ . '/../../../templates');
$this->db = new Db();
}
public function main()
{
$articles = $this->db->query('SELECT * FROM `articles`;');
var_dump($articles);
//$this->view->renderHtml('main/main.php', ['articles' => $articles]);
}
}
Давайте посмотрим на результат.
То есть сейчас $articles – это массив с двумя вложенными элементами-массивами, представляющих собой статьи из базы данных.
Наш класс для работы с базой данных готов. В следующем уроке мы начнём его использовать для вывода статей на сайте.
Текущая версия кода на гитхабе.
Комментарии