Difference between #3 and #4 of
How to use nested DB transactions (MySQL 5+, PostgreSQL)

Revision #4 has been created by samdark on Aug 6, 2011, 1:03:08 PM with the memo:

Updated configuration for 1.1.8
« previous (#3) next (#5) »


Title changed

How to use nested DB transactions (MySqlQL 5+, PgSqlostgreSQL)

Category changed


Yii version unchanged

Tags unchanged

db, mysql, postgresql, transaction, nested

Content changed

sSource code taken from: [PHP, PDO & Nested Transactions](http://www.kennynet.co.uk/2008/12/02/php-pdo-nested-transactions/). tTested with: MySqlQL 5.1.30 + Yii 1.1.8.

With default Yii implementation, PDO will throw exception saying there already is active transaction.

But there's a solution

First, you'll need to extend PDO class and save it in your the protected/components directory:

Then, you'll need to alter the behaviour of [CDbConnection::createPdoInstance()]. You can do this by making a subclass of it in protected/components/NestedDbConnection.php
There, change $pdoClass to
Now your class name (NestedPDO in this example):
class NestedDbConnection extends CDbConnection
    protected function createPdoInstance()
            if($driver==='mssql' || $driver==='dblib')
        return new $pdoClass($this->connectionString,$this->username,
Note that $this->_attributes was also changed to $this->attributes so the subclassing will work.
Now you can add the class name to the
an use it in db configuration array in `protected/config/main.php`: ```php 'db'=>array(        'c'pdoClass' => 'NestedDbConnection',
'connectionString' => ...         ), ``` That's it, there you go ;)
41 0
Viewed: 46 427 times
Version: 1.1
Category: How-tos
Written by: mindeh
Last updated by: Boaz
Created on: Jun 30, 2009
Last updated: 2 years ago
Update Article


View all history