MODX. xPDO, сравнение с PDO и PHP
Отредактировано: 06 Июля 2023
Чтобы понять в чем различия между 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 — удобен при необходимости внесения каких-либо изменений в базу данных, и при возможной работе с различными типами баз данных.