2013-04-12 41 views
1

我已經成功地在Joomla中創建了一個用戶可以更新數據庫內容的組件。問題是我有兩個查詢要執行,如果第二個查詢失敗,第一個查詢完成的更改應該被丟棄。我試過這些代碼,它不給我回滾:如何在Joomla 1.5中創建SQL事務?

$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

如果您的更新查詢不起作用,那麼您的邏輯是正確的。它應該回滾最近執行的查詢。你只需要在'BEGIN'之前使用'START TRANSACTION'。休息很好。 – Harpreet