Yii2: A transaction that was started in a MARS batch is still active at the end of the batch. The transaction is rolled back.

Created on 22 May 2015  路  3Comments  路  Source: yiisoft/yii2

Could you please advise on the following MSSQL transaction issue.

I'm starting a transaction from within AR class:

    public function transactions() {
        return [
            Model::SCENARIO_DEFAULT => self::OP_INSERT
        ];
    }

This results in the following exception:

2015-05-22 10:29:58 [127.0.0.1][patyua][gghapciuoi1cou2skkgs2d3105][trace][yii\db\Transaction::begin] Begin transaction
2015-05-22 10:29:58 [127.0.0.1][patyua][gghapciuoi1cou2skkgs2d3105][error][PDOException] exception 'PDOException' with message 'SQLSTATE[42000]: [Microsoft][SQL Server Native Client 11.0][SQL Server]A transaction that was started in a MARS batch is still active at the end of the batch. The transaction is rolled back.' in C:\inetpub\sites\qtyii2\vendor\yiisoft\yii2\db\mssql\PDO.php:36
Stack trace:
#0 C:\inetpub\sites\qtyii2\vendor\yiisoft\yii2\db\mssql\PDO.php(36): PDO->exec('BEGIN TRANSACTI...')
#1 C:\inetpub\sites\qtyii2\vendor\yiisoft\yii2\db\Transaction.php(119): yii\db\mssql\PDO->beginTransaction()
#2 C:\inetpub\sites\qtyii2\vendor\yiisoft\yii2\db\Connection.php(639): yii\db\Transaction->begin(NULL)
#3 C:\inetpub\sites\qtyii2\vendor\yiisoft\yii2\db\ActiveRecord.php(425): yii\db\Connection->beginTransaction()
#4 C:\inetpub\sites\qtyii2\vendor\yiisoft\yii2\db\BaseActiveRecord.php(589): yii\db\ActiveRecord->insert(true, NULL)
#5 C:\inetpub\sites\qtyii2\frontend\controllers\DoController.php(83): yii\db\BaseActiveRecord->save()
#6 [internal function]: frontend\controllers\DoController->actionSubscribeSr()
#7 C:\inetpub\sites\qtyii2\vendor\yiisoft\yii2\base\InlineAction.php(55): call_user_func_array(Array, Array)
#8 C:\inetpub\sites\qtyii2\vendor\yiisoft\yii2\base\Controller.php(151): yii\base\InlineAction->runWithParams(Array)
#9 C:\inetpub\sites\qtyii2\vendor\yiisoft\yii2\base\Module.php(455): yii\base\Controller->runAction('subscribe-sr', Array)
#10 C:\inetpub\sites\qtyii2\vendor\yiisoft\yii2\web\Application.php(84): yii\base\Module->runAction('do/subscribe-sr', Array)
#11 C:\inetpub\sites\qtyii2\vendor\yiisoft\yii2\base\Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request))
#12 C:\inetpub\sites\qtyii2\frontend\web\index.php(17): yii\base\Application->run()

Kindly advise why this is happening.

Yii 2.0.4 PHP 5.5.24, SQL Server 2012, using php_pdo_sqlsrv_55_nts.dll.

Most helpful comment

Multiple Active Result Sets (MARS)
https://msdn.microsoft.com/en-us/library/cfa084cz(v=vs.110).aspx

All 3 comments

what is MARS?

Multiple Active Result Sets (MARS)
https://msdn.microsoft.com/en-us/library/cfa084cz(v=vs.110).aspx

Sorted this one out by modifying connection DNS to include "MultipleActiveResultSets=False".

Was this page helpful?
0 / 5 - 0 ratings

Related issues

samdark picture samdark  路  63Comments

gpoehl picture gpoehl  路  47Comments

Faryshta picture Faryshta  路  48Comments

alexraputa picture alexraputa  路  53Comments

Mirocow picture Mirocow  路  56Comments