48 lines
1.1 KiB
PHP
48 lines
1.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App;
|
|
|
|
use PDO;
|
|
|
|
final class Database
|
|
{
|
|
private PDO $pdo;
|
|
|
|
public function __construct(PDO $pdo)
|
|
{
|
|
$this->pdo = $pdo;
|
|
}
|
|
|
|
public static function fromConfig(array $config): self
|
|
{
|
|
$database = $config['database'] ?? [];
|
|
|
|
$host = (string) ($database['host'] ?? '127.0.0.1');
|
|
$port = (string) ($database['port'] ?? '5432');
|
|
$name = (string) ($database['name'] ?? 'spreadsheet_importer');
|
|
$user = (string) ($database['user'] ?? 'postgres');
|
|
$password = (string) ($database['password'] ?? '');
|
|
$sslMode = (string) ($database['sslmode'] ?? 'prefer');
|
|
|
|
$pdo = new PDO(
|
|
sprintf('pgsql:host=%s;port=%s;dbname=%s;sslmode=%s', $host, $port, $name, $sslMode),
|
|
$user,
|
|
$password,
|
|
[
|
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
|
PDO::ATTR_EMULATE_PREPARES => false,
|
|
]
|
|
);
|
|
|
|
return new self($pdo);
|
|
}
|
|
|
|
public function pdo(): PDO
|
|
{
|
|
return $this->pdo;
|
|
}
|
|
}
|