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);
|
$driver = substr($driver, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$dsn = null;
|
||||||
switch ($driver) {
|
switch ($driver) {
|
||||||
case 'mysql':
|
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':
|
case 'pgsql':
|
||||||
$dsn = $driver.':';
|
$dsn ?? $dsn = 'pgsql:';
|
||||||
|
|
||||||
if (isset($params['host']) && '' !== $params['host']) {
|
if (isset($params['host']) && '' !== $params['host']) {
|
||||||
$dsn .= 'host='.$params['host'].';';
|
$dsn .= 'host='.$params['host'].';';
|
||||||
|
@ -332,6 +332,8 @@ class PdoSessionHandlerTest extends TestCase
|
|||||||
public function provideUrlDsnPairs()
|
public function provideUrlDsnPairs()
|
||||||
{
|
{
|
||||||
yield ['mysql://localhost/test', 'mysql:host=localhost;dbname=test;'];
|
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 ['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 ['mysql2://root:pwd@localhost/test', 'mysql:host=localhost;dbname=test;', 'root', 'pwd'];
|
||||||
yield ['postgres://localhost/test', 'pgsql:host=localhost;dbname=test;'];
|
yield ['postgres://localhost/test', 'pgsql:host=localhost;dbname=test;'];
|
||||||
|
Reference in New Issue
Block a user