diff --git a/pkg/dbal/DbalConnectionFactory.php b/pkg/dbal/DbalConnectionFactory.php index 55164213c..21731d3dd 100644 --- a/pkg/dbal/DbalConnectionFactory.php +++ b/pkg/dbal/DbalConnectionFactory.php @@ -98,10 +98,10 @@ private function parseDsn($dsn) throw new \LogicException(sprintf('Failed to parse DSN "%s"', $dsn)); } - $schema = parse_url($dsn, PHP_URL_SCHEME); - if (empty($schema)) { + if (!preg_match('/^([0-9a-z_]+):(.+)?$/', $dsn, $matches)) { throw new \LogicException('Schema is empty'); } + $schema = $matches[1]; $supported = [ 'db2' => true, diff --git a/pkg/dbal/Tests/DbalConnectionFactoryConfigTest.php b/pkg/dbal/Tests/DbalConnectionFactoryConfigTest.php index eeaf31c34..5b0bb3b05 100644 --- a/pkg/dbal/Tests/DbalConnectionFactoryConfigTest.php +++ b/pkg/dbal/Tests/DbalConnectionFactoryConfigTest.php @@ -72,6 +72,16 @@ public static function provideConfigs() ], ]; + yield [ + 'pdo_mysql:', + [ + 'lazy' => true, + 'connection' => [ + 'url' => 'pdo_mysql://root@localhost', + ], + ], + ]; + yield [ 'pgsql:', [ @@ -92,6 +102,16 @@ public static function provideConfigs() ], ]; + yield [ + 'pdo_mysql://user:pass@host:10001/db', + [ + 'lazy' => true, + 'connection' => [ + 'url' => 'pdo_mysql://user:pass@host:10001/db', + ], + ], + ]; + yield [ [], [