【问题标题】:How to do a database transaction with Joomla Jtable如何使用 Joomla Jtable 进行数据库事务
【发布时间】:2015-03-25 03:51:37
【问题描述】:

我正在向 Joomla 中的表格插入数据

foreach($resultarray as $data1)
{
  $table = JTable::getInstance('Upload', 'UsersTable', array());
  $table->bind($data1);
  $table->store();
}

我想做一个事务,这样就会有 START TRANSACTION, COMMIT

怎么做?

【问题讨论】:

    标签: php joomla transactions


    【解决方案1】:

    Joomla Joomla 3.x 通过 JDatabaseDriver 的 transactionStart、transactionCommit 和 transactionRollback 引入了 SQL 事务(在支持的情况下)。这取代了 Joomla Joomla 2.5 中引入的 queryBatch 方法。

    $db = JFactory::getDbo();
    
    try
    {
    $db->transactionStart();
    
    $query = $db->getQuery(true);
    
    $values = array($db->quote('TEST_CONSTANT'), $db->quote('Custom'), $db->quote('/path/to/translation.ini'));
    
    $query->insert($db->quoteName('#__overrider'));
    $query->columns($db->quoteName(array('constant', 'string', 'file')));
    $query->values(implode(',',$values));
    
    $db->setQuery($query);
    $result = $db->execute();
    
    $db->transactionCommit();
    }
    catch (Exception $e)
    {
    // catch any database errors.
    $db->transactionRollback();
    JErrorPage::render($e);
    }
    

    我从here中选择了这个例子

    【讨论】:

    • 您对 Joomla SQL 事务的提示是正确的。但这是否也像问题中提到的那样在表级别上得到支持?
    • (当我说“似乎不起作用”时,我的意思是 $db->transactionRollback(); 不做任何事情;它不回滚,也不抛出异常。)跨度>
    猜你喜欢
    • 2010-11-16
    • 2016-10-15
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    相关资源
    最近更新 更多