1

ユーザーがデータベースのコンテンツを更新できる Joomla のコンポーネントを正常に作成しました。問題は、実行するクエリが 2 つあることです。2 番目のクエリが失敗した場合、最初のクエリによって行われた変更を破棄する必要があります。これらのコードを試しましたが、ロールバックしません:

    $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 でトランザクションを作成するにはどうすればよいでしょうか?

4

1 に答える 1

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

最近実行されたクエリに対してロールバックを実行する必要があります。

于 2013-04-12T07:09:11.897 に答える