2012-01-04 6 views
1

я играл с созданием класса абстракции базы данных для целей, где вы можете создать несколько подключения к любым базам данных у вас есть драйвера для делать что-то вроде обучения:Имеет ли смысл абстрагироваться обработка базы данных теперь, когда у нас есть PDO?

//Create multiple database connections 
$db1 = new DatabaseFactory("MySQL","root","","localhost"); 
$db2 = new DatabaseFactory("MySQL","root","","localhost"); 

или ...

$db = new DatabaseFactory("SQLite"); 

Но я подумал об этом, и если вам не нужно управлять несколькими соединениями с фабричным объектом, действительно ли не нужно что-то подобное с появлением PDO правильно?

Вопрос в том, что, по вашему мнению, полезно иметь дополнительные уровни абстракции для PDO и почему?

ответ

1

Если мышление строго абстракции операций на уровне базы данных, а не такие, как ORM, все еще существует проблема поддержки SQL между различными базами данных.

Например, сравнивая SQLite, Postgre и MySQL, все они поддерживают большую часть одного и того же синтаксиса, но также существуют различные различия между связкой.

PDO не принимает никаких мер, чтобы абстрагировать различия в поддержке SQL между платформами.

Есть и другие вещи, которые можно было бы скрыть с помощью другого слоя. Однако, будь это очень выполнимо или нет, это немного сомнительно. Рассмотрим, например, попытку использовать программное обеспечение для эмуляции проверок внешнего ключа в SQLite или таких.

+0

Если бы вы использовали конкретную базу данных, я бы предположил, что вы понимаете ее специфические нюансы SQL. Точно так же я понимаю, что вы имеете в виду. Если однажды мне захотелось переключить базы данных с MySQL на Postgre, это может сломать мое приложение из-за существующих SQL-операторов, которые я использую. –

+0

@cillosis некоторые люди любят использовать sqlite для разработки и некоторые другие сверхмощные базы данных для производства. Я сам не поклонник этого, но я вижу, как привлекательность минимальной среды на вашей машине для разработчиков. Я бы, наверное, сделал это сам, если бы мой код не был специфичным для базы данных. –

0

Хотя PDO является большим улучшением по сравнению с более старым веществом функции mysql, он по-прежнему является очень низким уровнем API для доступа к базе данных.

Так что да, для большинства ситуаций все еще имеет смысл обернуть вокруг него API более высокого уровня.

Например, API более высокого уровня можно использовать, чтобы сделать атаки SQL-инъекций практически невозможными.

+3

PDO уже делает это (sql injection Prevention), если вы используете его apis для подготовленных запросов –

+0

+1 для подготовленных заявлений! –

+0

Конечно, но оболочка также может использовать встроенные функции безопасности PDO, предоставляя гораздо более удобный способ доступа к ним. –

Смежные вопросы