MODX. xPDO, сравнение с PDO и PHP

Чтобы понять в чем различия между xPDO, PDO и PHP, рассмотрим их по отдельности:

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

Про объекты в xPDO

Каждый объект (класс) имеет свойства (поля). Свойством выступает столбец таблицы. Для примера рассмотрим объект modResource, который представлен в базе данных в виде таблицы modx_site_content, и хранит в себе данные о ресурсах. Этот объект состоит из свойств: id, pagetitle, description, content и т.п.; которые, в свою очередь, являются столбцами в базе данных SQL.

Каждый такой объект может иметь связи с другими объектами. Например, объект modResource связан с объектом modUser, поскольку у ресурса есть автор, который его создал. Эта связь указывается в столбце PublishedBy (указывается id строки элемента из таблицы modUser).

Основные различия

XPDO — это расширенная версия языка PDO. Зачастую он съедает в 2 раза больше ресурсов сервера, но, за счет того что подходит сразу для нескольких типов баз данных. Для лучшего понимания:

Метод PHP

mysql_connect('localhost','root','rootpassword');
mysql_select_db('modx');

$sql = "SELECT * FROM `modx_site_content` WHERE id > 0 LIMIT 100";
$res = mysql_query($sql);
$arr = array();
while ($row = mysql_fetch_assoc($res)) {
    $arr[] = $row;
}
getStatus('Выборка '.count($arr).' ресурсов стандартными функциями Mysql');

Достоинства: самый быстрый способ общения с базой.

Недостатки: при использовании таких запросов к базе можно пропустить необходимые методы защиты, и конструкцию будет проще взломать.

Метод PDO

$sql = "SELECT * FROM {$modx->getTableName('modResource')} WHERE id > ? LIMIT 100";
$q = $modx->prepare($sql);
$q->execute(array(0));
$arr = $q->fetchAll(PDO::FETCH_ASSOC);
getStatus('Выборка '.count($arr).' ресурсов через PDO');

Достоинства: код простой, удобный, многие уязвимости ликвидированы;

Недостатки: код написанный для MySQL может не работать для MsSQL, из-за разницы в деталях;

Метод xPDO

$q = $modx->newQuery('modResource');
$q->where(array('id:>' => 0));
$q->limit('100');
if ($q->prepare() && $q->stmt->execute()) {
    $arr = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
}
getStatus('Выборка '.count($arr).' ресурсов через xPDO');

Достоинства: поддерживается несколько типов баз данных; в некоторых случаях количество кода значительно меньше.

Недостатки: предварительно нужно загрузить модель данных; запрос обрабатывается дольше, иногда намного дольше.

Муки выбора, итог

В MODX можно использовать все 3 варианта, но, когда и что лучше выбрать?

PHP — вариант для мазохистов заточенных под максимальное ускорение базы.

PDO — удобен в случае если надо делать небольшие выборки, или если данные просто отображаются на сайте, без каких-либо действий над объектами. Естественно в небольших проектах, где все будет устроено на одном типе баз данных.

xPDO — удобен при необходимости внесения каких-либо изменений в базу данных, и при возможной работе с различными типами баз данных.