Работа с базой данных в Joomla

JDatabaseDriver - использование транзакций

Joomla
JDatabaseDriver - использование транзакций

Перед прочтением этого материала рекомендуем вам ознакомиться со следующими материалами:

Транзакции могут быть использованы только в тех системах хранения данных, которые их поддерживают, например InnoDB. Все базовые таблицы Joomla CMS (начиная с версии 3) используют InnoDB, однако, разработчики сторонних расширений могут их не использовать.

Транзакции доступны для использования начиная с Joomla 3. Их поддержка осуществляется с помощью трех методов, которые реализуются в подклассах класса JDatabaseDriver:

  • transactionStart($asSavepoint = false)– стартовая точка транзакции. Если параметр $asSavepoint установлен в true и транзакция уже активна, то вместо начала транзакции будет создана точка сохранения.
  • transactionCommit($toSavepoint = false)– коммит транзакции. Если параметр $toSavepoint установлен в true, коммит будет произведен в последнюю точку сохранения.
  • transactionRollback($toSavepoint = false)– откат транзакции. Если параметр $toSavepoint установлен в true, откат будет произведен в последнюю точку сохранения.

Ниже приведен пример использования транзакции:

$db = JFactory::getDbo();
 
try
{
    $db->transactionStart();
 
    $query = $db->getQuery(true);
 
    $values = array(
        $db->quote('CONSTANT'),
        $db->quote('Some string'),
        $db->quote('Joomla is awesome!')
    );
 
    $query->insert($db->quoteName('#__some_table'));
    $query->columns(
        $db->quoteName(
            array(
                'constant',
                'string',
                'title'
            )
        )
    );
    $query->values(implode(',', $values));
 
    $db->setQuery($query)
        ->execute();
 
    $db->transactionCommit();
}
catch (Exception $e)
{
    $db->transactionRollback();
 
    JFactory::getApplication()->enqueueMessage($e->getMessage(), 'error');
}

Изменения, произведённые над содержимым БД после transactionStart() не будут в ней отражены до тех пор, пока не будет вызван метод transactionCommit(). Если случится исключение, мы можем откатить все изменения с помощью метода transactionRollback().

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

Транзкции в MySQL

Оригинальная статья:
Dmitry Rekun
Работаю в банковской сфере, а с веб-разработкой (непосредственно с Joomla) столкнулся в 2007 году. Теперь это моё хобби и время от времени вторая работа. Какое-то время вёл свой блог, но решил попробовать работать в команде. И вот c 2012 года я здесь :)