Я начинаю новый тонкий проект с поддержкой twig, я хочу использовать PDO в качестве уровня базы данных, как можно интегрировать? или просто использовать GLOBAL $db?
Спасибо.
Я начинаю новый тонкий проект с поддержкой twig, я хочу использовать PDO в качестве уровня базы данных, как можно интегрировать? или просто использовать GLOBAL $db?
Спасибо.
я против изменяемых глобалов. вы можете использовать простой фабричный метод, возвращающий ваше соединение:
function db() {
static $db = null;
if (null === $db)
$db = new PDO(...);
return $db;
}
если вы собираетесь иметь дело с другими такими проблемами, подумайте о реестре (см. этот).
Что касается изменяемых глобальных переменных:
Я против таких вещей, потому что, ну, их легко видоизменить.
Что произойдет, если во время выполнения программы обстоятельства неожиданно изменятся?
Все сломается.
Если вы единственный, кто работает над проектом, глобальные переменные могут подойти.
Но по моему опыту, даже в этом сценарии отслеживание глобальных переменных становится проблемой и нарушает логическую организацию вашего кода.
Что? если вы дойдете до того, что поделитесь своим кодом с другими, кто перезапишет такой глобальный?
Кроме того, глобальные переменные противоречат методологии инкапсуляции данных в контексте разделение интересов.
Все это играет роль в большой, широкой науке об архитектуре программного обеспечения.
Кроме того, использование фабрики в этом конкретном случае гарантирует, что вы сохраните только одну единственную ссылку на соединение с вашей базой данных.
$sth =null;
?
- person Abel Jojo; 13.06.2017
Посмотрите этот проект: Slim-PDO (github)
Документация здесь
Установить через композитор:
$ composer require slim/pdo
Простое использование:
$app->container->singleton('database', function () use ($app) {
return new \Slim\PDO\Database($app->config('db.dsn'), $app->config('db.usr'), $app->config('db.pwd'));
});
// SELECT * FROM users WHERE id = ?
$selectStatement = $app->database->select()
->from('users')
->where('id', '=', 1234);
$stmt = $selectStatement->execute();
$data = $stmt->fetch();
// INSERT INTO users ( id , usr , pwd ) VALUES ( ? , ? , ? )
$insertStatement = $app->database->insert(array('id', 'usr', 'pwd'))
->into('users')
->values(array(1234, 'your_username', 'your_password'));
$insertId = $insertStatement->execute(false);