Я использую класс БД (с PDO) для доступа к серверу MySQL, и у меня есть вопрос по этому поводу.
У меня есть структура проекта, которая выглядит так: Структура проекта
Моя проблема в том, что мне нужно в каждом скрипте создавать и закрывать объект БД или есть другое решение этой проблемы? Какая в этих случаях привычка? Могу ли я как-то обобщить приведенный ниже фрагмент кода?
Сейчас на затронутых страницах это выглядит так:
try
{
$db = new DB();
} catch (DBException $e)
{
forwardToErrorPage($e->getMessage());
return;
}
try
{
if ($db->someDBFunction($args) == 0)
header("Location: ../templates/success.php");
else
forwardToErrorPage('Adding person failed');
} catch (DBException $e)
{
forwardToErrorPage($e->getMessage());
}
finally
{
$db->close();
}






вы можете включить require_once('/path/to/project/src/DB.php'); в заголовок всего файла, а в DB.php сделать дескриптор своей БД:
try
{
$db = new DB();
} catch (DBException $e)
{
forwardToErrorPage($e->getMessage());
return;
}
Лучшее решение, которое я бы рекомендовал использовать ORM, например Eloquent (ссылка):
composer require illuminate/database
затем в вашем файле DB.php:
require_once "vendor/autoload.php";
use Illuminate\Database\Capsule\Manager as Capsule;
$capsule = new Capsule;
$capsule->addConnection([
"driver" => "mysql",
"host" =>"127.0.0.1",
"database" => "acl",
"username" => "root",
"password" => ""
]);
$capsule->setAsGlobal();
$capsule->bootEloquent();
Каждый раз, если вы хотите использовать свою базу данных, вы должны создавать соединение с базой данных. Существует множество библиотек, которые помогают вам управлять базой данных, но если вам нужен хороший и простой подход, используйте Синглтон.
Еще один хороший подход - изменить ваш класс db на service и внедрение зависимости.
Я не хочу объяснять здесь шаблон Singleton, DI и сервисы, потому что в Интернете и на SO было много инструкций для этого.
Используйте включает, еще лучше используйте классы и spl_autoload_register, см. Также СУХИЙ принцип