【问题标题】:How to create SQL transactions in Joomla 1.5?如何在 Joomla 1.5 中创建 SQL 事务?
【发布时间】:2025-12-15 09:25:01
【问题描述】:

我已经在 J​​oomla 中成功创建了一个组件,用户可以在其中更新数据库内容。问题是我有两个查询要执行,如果第二个查询失败,第一个查询所做的更改应该被丢弃。我已经尝试过这些代码,但它没有让我回滚:

    $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 中创建事务呢?

【问题讨论】:

    标签: mysql joomla1.5


    【解决方案1】:

    你应该这样做:

    $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();
    

    必须对最近执行的查询执行回滚。

    【讨论】:

    • 实际上$update_query 是产生错误的那个,如果发生这种情况,我想放弃$delete_query 所做的更改。这可能吗?
    • 如果您的更新查询不起作用,那么您的逻辑是正确的。它应该回滚最近执行的查询。您只需要在BEGIN 之前使用START TRANSACTION。休息很好。