diff --git a/core/lib/Drupal/Core/Database/Connection.php b/core/lib/Drupal/Core/Database/Connection.php index f529180..358fa71 100644 --- a/core/lib/Drupal/Core/Database/Connection.php +++ b/core/lib/Drupal/Core/Database/Connection.php @@ -1273,8 +1273,9 @@ public function quote($string, $parameter_type = \PDO::PARAM_STR) { */ public function serialize() { $connection = clone $this; - // Don't serialize the PDO connection and other lazy-instantiated members. - unset($connection->connection, $connection->connectionOptions, $connection->schema, $connection->driverClasses); + // Don't serialize the PDO connection as well as everything else which + // depends on settings.php. + unset($connection->connection, $connection->connectionOptions, $connection->schema, $connection->prefixes, $connection->prefixReplace, $connection->driverClasses); return serialize(get_object_vars($connection)); } @@ -1295,6 +1296,8 @@ public function unserialize($serialized) { if (!empty($this->statementClass)) { $this->connection->setAttribute(\PDO::ATTR_STATEMENT_CLASS, array($this->statementClass, array($this))); } + + $this->setPrefix(isset($this->connectionOptions['prefix']) ? $this->connectionOptions['prefix'] : ''); } } diff --git a/core/modules/system/src/Tests/Database/ConnectionUnitTest.php b/core/modules/system/src/Tests/Database/ConnectionUnitTest.php index ab00fb0..754aa85 100644 --- a/core/modules/system/src/Tests/Database/ConnectionUnitTest.php +++ b/core/modules/system/src/Tests/Database/ConnectionUnitTest.php @@ -235,7 +235,10 @@ public function testConnectionSerialization() { $this->fail('The database connection cannot be serialized.'); } - $this->assertIdentical(FALSE, strpos($serialized, 'connectionOptions'), 'The connection information was not serialized.'); + $not_serialized_properties = ['connection', 'connectionOptions', 'schema', 'prefixes', 'prefixReplace', 'driverClasses']; + foreach ($not_serialized_properties as $property) { + $this->assertIdentical(FALSE, strpos($serialized, $property)); + } // Ensure that all properties on the unserialized object are the same. $db_reflection = new \ReflectionObject($db);