2012-06-30 2 views
1

один вопрос о PHP Development. Я создаю некоторые поля формы для вычислений. Jquery Вычисляет и отправляет Целочисленные значения в PHP-скрипт через ajax. Эти скрипты выбирают некоторые значения из базы данных, вычисляют и возвращают значения в поле формы.PHP написать программу для любой базы данных

Теперь вопрос. Я привык к Mysql, поэтому я использую функции PHP Mysql для выбора значений. Позже Datasource должен быть Postgres SQL. Какой лучший способ программирования получить независимый от источника данных. Существует ли какая-то модель дизайна для этой проблемы?

С уважением,

Тони

ответ

2

Похоже, что вы ищете PDO, стандартный уровень абстракции SQL для PHP.

4

Дизайн шаблон вы ищете Query Object:

Объект, представляющий запрос к базе данных.

SQL может быть вовлеченным языком, и многие разработчики не особенно знакомы с ним. Кроме того, вам нужно знать, как выглядит схема базы данных для формирования запросов. Вы можете избежать этого, создав специализированные методы поиска, которые скрывают SQL внутри параметризованных методов, но это затрудняет формирование дополнительных запросов ad hoc. Это также приводит к дублированию в операторах SQL при изменении схемы базы данных.

Объект запроса - это interpreter [Gang of Four], то есть структура объектов, которые могут сформироваться в SQL-запрос. Вы можете создать этот запрос, обратившись к классам и полям, а не к таблицам и столбцам. Таким образом, те, кто пишет запросы, могут сделать это независимо от схемы базы данных, а изменения в схеме могут быть локализованы в одном месте.

Когда вы используете объект запроса, вообще не будет SQL для публичного API. Преобразование объекта запроса в соответствующий SQL-сервер поставщика будет происходить под капотом. Это будет связано с написанием соответствующих адаптеров и, не ограничиваясь этим, базами данных SQL.


альтернатива было бы использовать что-то вроде Zend_Db_Select, который является внутренним DSL для создания запросов SQL.

Пример из ZF Reference Guide:

$select = $db->select() 
    ->from(...specify table and columns...) 
    ->where(...specify search criteria...) 
    ->order(...specify sorting criteria...); 

Но пока Zend_Db_SelectPDO упоминается в других местах) абстрактного доступа к используемой БД системы в какой-то степени, они все еще требуют, чтобы вы знали SQL и структуры таблиц. В отличие от объекта запроса, использование уровня абстракции DB, такого как , не гарантирует переносимость.

В зависимости от того, какие аргументы вы применяете в этих методах, вы можете получить запросы, которые больше не будут переносимыми, например. when you use a specific DB vendor's dialect or functions in the queries.

Так что выбрать, зависит от ваших запросов. Если вы знаете, что у вас есть только стандартные запросы, не используйте Query Object, потому что это гораздо больше усилий для реализации. Используйте объект запроса, если вы хотите получить максимальную независимость от источника данных.

+0

Большое спасибо. это звучит действительно то, что я ищу. –

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