Browse Source

Fixed serialization of `yii\db\Connection` instance closes database connection

tags/2.0.13
Klimov Paul 7 years ago
parent
commit
9e6f9e3b6d
  1. 1
      framework/CHANGELOG.md
  2. 11
      framework/db/Connection.php
  3. 4
      tests/framework/db/ConnectionTest.php

1
framework/CHANGELOG.md

@ -4,6 +4,7 @@ Yii Framework 2 Change Log
2.0.13 under development
------------------------
- Bug #14723: Fixed serialization of `yii\db\Connection` instance closes database connection (klimov-paul)
- Bug #14697: Fixed `console\widgets\Table` rendering when there's no data supplied (bscheshirwork)
- Enh #13853: Added `yii\db\Migration::$compact` as well as `yii\console\controllers\BaseMigrateController::$compact` to allow making the migration console output more compact (francislavoie)
- Enh #14184: Module service locator now falls back to its parent module service locator in case component isn't found (SamMousa)

11
framework/db/Connection.php

@ -1082,8 +1082,15 @@ class Connection extends Component
*/
public function __sleep()
{
$this->close();
return array_keys((array) $this);
$fields = (array) $this;
unset($fields['pdo']);
unset($fields["\000" . __CLASS__ . "\000" . '_master']);
unset($fields["\000" . __CLASS__ . "\000" . '_slave']);
unset($fields["\000" . __CLASS__ . "\000" . '_transaction']);
unset($fields["\000" . __CLASS__ . "\000" . '_schema']);
return array_keys($fields);
}
/**

4
tests/framework/db/ConnectionTest.php

@ -48,8 +48,12 @@ abstract class ConnectionTest extends DatabaseTestCase
$connection = $this->getConnection(false, false);
$connection->open();
$serialized = serialize($connection);
$this->assertNotNull($connection->pdo);
$unserialized = unserialize($serialized);
$this->assertInstanceOf('yii\db\Connection', $unserialized);
$this->assertNull($unserialized->pdo);
$this->assertEquals(123, $unserialized->createCommand('SELECT 123')->queryScalar());
}

Loading…
Cancel
Save