feature #40300 [HttpFoundation] Add support for mysql unix_socket and charset in PdoSessionHandler::buildDsnFromUrl (bcremer, Nyholm)
This PR was merged into the 5.3-dev branch.
Discussion
----------
[HttpFoundation] Add support for mysql unix_socket and charset in PdoSessionHandler::buildDsnFromUrl
| Q | A
| ------------- | ---
| Branch? | 5.x
| Bug fix? | no
| New feature? | yes <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets | Fix https://github.com/symfony/symfony/issues/40290
| License | MIT
| Doc PR | symfony/symfony-docs#... <!-- required for new features -->
Commits
-------
f4e50fb1c7
[HttpFoundation] Add support for mysql unix_socket and charset in PdoSessionHandler::buildDsnFromUrl
This commit is contained in:
commit
620989dac1
@ -486,10 +486,32 @@ class PdoSessionHandler extends AbstractSessionHandler
|
||||
$driver = substr($driver, 4);
|
||||
}
|
||||
|
||||
$dsn = null;
|
||||
switch ($driver) {
|
||||
case 'mysql':
|
||||
$dsn = 'mysql:';
|
||||
if ('' !== ($params['query'] ?? '')) {
|
||||
$queryParams = [];
|
||||
parse_str($params['query'], $queryParams);
|
||||
if ('' !== ($queryParams['charset'] ?? '')) {
|
||||
$dsn .= 'charset='.$queryParams['charset'].';';
|
||||
}
|
||||
|
||||
if ('' !== ($queryParams['unix_socket'] ?? '')) {
|
||||
$dsn .= 'unix_socket='.$queryParams['unix_socket'].';';
|
||||
|
||||
if (isset($params['path'])) {
|
||||
$dbName = substr($params['path'], 1); // Remove the leading slash
|
||||
$dsn .= 'dbname='.$dbName.';';
|
||||
}
|
||||
|
||||
return $dsn;
|
||||
}
|
||||
}
|
||||
// If "unix_socket" is not in the query, we continue with the same process as pgsql
|
||||
// no break
|
||||
case 'pgsql':
|
||||
$dsn = $driver.':';
|
||||
$dsn ?? $dsn = 'pgsql:';
|
||||
|
||||
if (isset($params['host']) && '' !== $params['host']) {
|
||||
$dsn .= 'host='.$params['host'].';';
|
||||
|
@ -332,6 +332,8 @@ class PdoSessionHandlerTest extends TestCase
|
||||
public function provideUrlDsnPairs()
|
||||
{
|
||||
yield ['mysql://localhost/test', 'mysql:host=localhost;dbname=test;'];
|
||||
yield ['mysql://localhost/test?charset=utf8mb4', 'mysql:charset=utf8mb4;host=localhost;dbname=test;'];
|
||||
yield ['mysql://localhost/test?unix_socket=socket.sock&charset=utf8mb4', 'mysql:charset=utf8mb4;unix_socket=socket.sock;dbname=test;'];
|
||||
yield ['mysql://localhost:56/test', 'mysql:host=localhost;port=56;dbname=test;'];
|
||||
yield ['mysql2://root:pwd@localhost/test', 'mysql:host=localhost;dbname=test;', 'root', 'pwd'];
|
||||
yield ['postgres://localhost/test', 'pgsql:host=localhost;dbname=test;'];
|
||||
|
Reference in New Issue
Block a user