public static function Connection::open in Drupal 10
Same name in this branch
- 10 core/modules/sqlite/src/Driver/Database/sqlite/Connection.php \Drupal\sqlite\Driver\Database\sqlite\Connection::open()
- 10 core/modules/pgsql/src/Driver/Database/pgsql/Connection.php \Drupal\pgsql\Driver\Database\pgsql\Connection::open()
- 10 core/modules/mysql/src/Driver/Database/mysql/Connection.php \Drupal\mysql\Driver\Database\mysql\Connection::open()
File
- core/modules/pgsql/src/Driver/Database/pgsql/Connection.php, line 89
Class
- Connection
- PostgreSQL implementation of \Drupal\Core\Database\Connection.
Namespace
Drupal\pgsql\Driver\Database\pgsql
Code
public static function open(array &$connection_options = []) {
if (empty($connection_options['port'])) {
$connection_options['port'] = 5432;
}
if (empty($connection_options['password'])) {
$connection_options['password'] = NULL;
}
else {
$connection_options['password'] = str_replace('\\', '\\\\', $connection_options['password']);
}
$connection_options['database'] = !empty($connection_options['database']) ? $connection_options['database'] : 'template1';
$dsn = 'pgsql:host=' . $connection_options['host'] . ' dbname=' . $connection_options['database'] . ' port=' . $connection_options['port'];
$connection_options += [
'pdo' => [],
];
$connection_options['pdo'] += [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_EMULATE_PREPARES => TRUE,
\PDO::ATTR_STRINGIFY_FETCHES => TRUE,
];
try {
$pdo = new \PDO($dsn, $connection_options['username'], $connection_options['password'], $connection_options['pdo']);
} catch (\PDOException $e) {
if (static::getSQLState($e) == static::CONNECTION_FAILURE) {
if (strpos($e
->getMessage(), 'password authentication failed for user') !== FALSE) {
throw new DatabaseAccessDeniedException($e
->getMessage(), $e
->getCode(), $e);
}
elseif (strpos($e
->getMessage(), 'database') !== FALSE && strpos($e
->getMessage(), 'does not exist') !== FALSE) {
throw new DatabaseNotFoundException($e
->getMessage(), $e
->getCode(), $e);
}
}
throw $e;
}
return $pdo;
}