vendor/doctrine/dbal/src/Driver/PDO/MySQL/Driver.php line 40

Open in your IDE?
  1. <?php
  2. namespace Doctrine\DBAL\Driver\PDO\MySQL;
  3. use Doctrine\DBAL\Driver\AbstractMySQLDriver;
  4. use Doctrine\DBAL\Driver\PDO\Connection;
  5. use Doctrine\DBAL\Driver\PDO\Exception;
  6. use PDO;
  7. use PDOException;
  8. use SensitiveParameter;
  9. final class Driver extends AbstractMySQLDriver
  10. {
  11. /**
  12. * {@inheritDoc}
  13. *
  14. * @return Connection
  15. */
  16. public function connect(
  17. #[SensitiveParameter]
  18. array $params
  19. ) {
  20. $driverOptions = $params['driverOptions'] ?? [];
  21. if (! empty($params['persistent'])) {
  22. $driverOptions[PDO::ATTR_PERSISTENT] = true;
  23. }
  24. $safeParams = $params;
  25. unset($safeParams['password'], $safeParams['url']);
  26. try {
  27. $pdo = new PDO(
  28. $this->constructPdoDsn($safeParams),
  29. $params['user'] ?? '',
  30. $params['password'] ?? '',
  31. $driverOptions,
  32. );
  33. } catch (PDOException $exception) {
  34. throw Exception::new($exception);
  35. }
  36. return new Connection($pdo);
  37. }
  38. /**
  39. * Constructs the MySQL PDO DSN.
  40. *
  41. * @param mixed[] $params
  42. */
  43. private function constructPdoDsn(array $params): string
  44. {
  45. $dsn = 'mysql:';
  46. if (isset($params['host']) && $params['host'] !== '') {
  47. $dsn .= 'host=' . $params['host'] . ';';
  48. }
  49. if (isset($params['port'])) {
  50. $dsn .= 'port=' . $params['port'] . ';';
  51. }
  52. if (isset($params['dbname'])) {
  53. $dsn .= 'dbname=' . $params['dbname'] . ';';
  54. }
  55. if (isset($params['unix_socket'])) {
  56. $dsn .= 'unix_socket=' . $params['unix_socket'] . ';';
  57. }
  58. if (isset($params['charset'])) {
  59. $dsn .= 'charset=' . $params['charset'] . ';';
  60. }
  61. return $dsn;
  62. }
  63. }