Skip to content

Commit a4a5827

Browse files
committed
Fix derive driverName in setConnectionParameters()
1 parent 1a3a67b commit a4a5827

File tree

1 file changed

+21
-10
lines changed

1 file changed

+21
-10
lines changed

src/Adapter/Driver/Pdo/AbstractPdoConnection.php

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Laminas\Db\Adapter\Driver\Pdo;
44

55
use Laminas\Db\Adapter\Driver\AbstractConnection;
6+
use Laminas\Db\Adapter\Driver\DriverInterface;
67
use Laminas\Db\Adapter\Driver\PdoDriverInterface;
78
use Laminas\Db\Adapter\Driver\ResultInterface;
89
use Laminas\Db\Adapter\Driver\StatementInterface;
@@ -56,24 +57,34 @@ public function setDriver(PdoDriverInterface $driver): static
5657
public function setConnectionParameters(array $connectionParameters): static
5758
{
5859
$this->connectionParameters = $connectionParameters;
60+
5961
if (isset($connectionParameters['dsn'])) {
60-
$this->driverName = substr(
61-
$connectionParameters['dsn'],
62-
0,
63-
strpos($connectionParameters['dsn'], ':')
64-
);
62+
$driverName = $this->getDriverNameFromParameter($connectionParameters['dsn']);
6563
} elseif (isset($connectionParameters['pdodriver'])) {
66-
$this->driverName = strtolower($connectionParameters['pdodriver']);
64+
$driverName = $this->getDriverNameFromParameter($connectionParameters['pdodriver']);
6765
} elseif (isset($connectionParameters['driver'])) {
68-
$this->driverName = strtolower(substr(
69-
str_replace(['-', '_', ' '], '', $connectionParameters['driver']),
70-
3
71-
));
66+
$driverName = $this->getDriverNameFromParameter($connectionParameters['driver']);
7267
}
7368

69+
$this->driverName = strtolower($driverName);
70+
7471
return $this;
7572
}
7673

74+
protected function getDriverNameFromParameter(mixed $parameter): string
75+
{
76+
if ($parameter instanceof DriverInterface) {
77+
return $parameter->getDatabasePlatformName();
78+
} elseif (is_string($parameter)) {
79+
if (str_contains($parameter, ':')) {
80+
return substr($parameter, 0, strpos($parameter, ':'));
81+
}
82+
return substr(str_replace(['-', '_', ' '], '', $parameter), 3);
83+
}
84+
85+
return '';
86+
}
87+
7788
/**
7889
* Get the dsn string for this connection
7990
*

0 commit comments

Comments
 (0)