2013-04-12 2 views
1

Я успешно создал компонент в Joomla, где пользователь может обновлять содержимое базы данных. Проблема в том, что у меня есть два запроса для выполнения, если второй запрос не выполняется, изменения, сделанные первым запросом, должны быть отброшены. Я пробовал эти коды, и это не дает мне откат:Как создать транзакции SQL в Joomla 1.5?

$db = JFactory::getDBO(); 

    $db->setQuery("BEGIN"); 
    $db->query(); 
    $db->setQuery($delete_script); 
    $db->query(); 
    $db->setQuery($update_script); 
    $db->query(); 

    if($db->getErrorMsg()) 
    { 
     $db->setQuery("ROLLBACK"); 
     $db->query(); 
     JFactory::getApplication()->enqueueMessage(JText::_($sql_script . 'An error occurred while saving loan types. Please check formatting and try again.'), 'error'); 
    } 
    else 
    { 
     $db->setQuery("COMMIT"); 
     $db->query(); 
     JFactory::getApplication()->enqueueMessage(JText::_('Loan types have been saved successfully!'), 'message'); 

    } 

    JRequest::setVar('view', 'loantypes'); 
    parent::display(); 

Как вы создаете транзакцию в Joomla 1.5?

ответ

0

Вы должны выполнить так:

$db = JFactory::getDBO(); 

$db->setQuery("BEGIN"); 
$db->query(); 

$db->setQuery($delete_script); 
$db->query(); 
if($db->getErrorMsg()) { 
    $db->setQuery("ROLLBACK"); 
    $db->query(); 
    JFactory::getApplication()->enqueueMessage(JText::_($sql_script . 'An error occurred while saving loan types. Please check formatting and try again.'), 'error'); 
} 
$db->setQuery($update_script); 
$db->query(); 

if(!$db->getErrorMsg()) { 
    $db->setQuery("COMMIT"); 
    $db->query(); 
    JFactory::getApplication()->enqueueMessage(JText::_('Loan types have been saved successfully!'), 'message'); 

} 

JRequest::setVar('view', 'loantypes'); 
parent::display(); 

Откат должны быть выполнены на недавнем выполненном запросе.

+0

На самом деле '$ update_query' является тем, который производит ошибку, и я хочу отменить изменения, сделанные' $ delete_query', если это произойдет. Это возможно? – dpp

+0

Если ваш запрос на обновление не работает, ваша логика верна. Он должен отменить недавний выполненный запрос. Вам просто нужно использовать «START TRANSACTION» перед «BEGIN». Отдых в порядке. – Harpreet

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