Разработка класса абстракции базы данных с использованием PHP PDO - PullRequest
4 голосов
/ 17 июля 2010

Я нахожусь в процессе разработки веб-приложения (на самом деле, это хобби, и я пытаюсь научить себя дизайну, и какой способ лучше, чем делать это :).Во всяком случае, я думал о том, как бы я справился с моей базой данных.Мне комфортно с PDO , и я думал об использовании PDO в моем классе абстракции.Я думаю о создании синглтона, чтобы было только одно соединение с базой данных.Этот синглтон создаст соединение PDO.

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

Что-то не так с этим подходом?Это кажется слишком простым по сравнению с абстракциями, которые я использовал.

Ответы [ 4 ]

5 голосов
/ 18 июля 2010

Вам не нужен Singleton.

База данных Singleton не решит проблем параллелизма.Во всяком случае, он может убедиться, что у вас есть только один экземпляр PDO для запроса, который был создан в .И это обеспечивает глобальный доступ, который многие считают плохим.Кроме того, вы должны приложить дополнительные усилия при тестировании Singleton .

Просто создать оболочку, которая лениво соединяет и сохраняет экземпляр , когда это необходимо, в вашем загрузчике и настройке.экземпляр вашего DAL супертипа , например TableDataGateway .Кроме того, таким образом вы не ограничиваете себя только одним экземпляром PDO на тот случай, если вам понадобится второй экземпляр в какой-то момент.

3 голосов
/ 17 июля 2010

Возможно, вам это кажется таким простым, потому что PDO - это, по сути, класс абстракции базы данных. Это значит: работа уже сделана.

2 голосов
/ 17 июля 2010

Да, это хорошее начало. PDO + синглтон - это часто используемая и отличная комбинация. Поскольку мне лично не нравится вся типизация, чем использование синглетонов, я написал очень легкий класс базы данных .

В PDO представлены только две дополнительные функции: доступ к (ленивому) экземпляру PDO с использованием __callStatic (DB::query() вместо DB::instance()->query()) и две функции для упрощения цитирования (DB::q('INSERT INTO table (name) VALUES (?s)', $_POST['insecure_name'])). Может быть, вы хотите посмотреть на оба, это действительно удобно;)

1 голос
/ 29 ноября 2010

Вас также может заинтересовать проект php-pdo-wrapper-class . Это легкий класс баз данных, который расширяет PDO, добавляя несколько методов - вставка, обновление, удаление, выбор (и несколько других) - для упрощения общих операторов SQL. Я использовал этот проект в своей разработке и очень рекомендую.

...