connect(); } /** * Establishes a connection to the database. */ private function connect(): void { $dsn = sprintf('mysql:host=%s;dbname=%s;charset=utf8mb4', getenv('DB_HOST'), getenv('DB_NAME')); try { $this->connection = new PDO($dsn, getenv('DB_USER'), getenv('DB_PASSWORD')); $this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); Logger::info('Database connection established successfully.'); } catch (PDOException $e) { Logger::error('Database connection failed: ' . $e->getMessage()); throw $e; } } /** * Executes a query and returns the result. * * @param string $query The SQL query to execute. * @param array $params Parameters for prepared statements (optional). * @return array The query result. */ public function query(string $query, array $params = []): array { try { $stmt = $this->connection->prepare($query); $stmt->execute($params); Logger::info('Query executed successfully: ' . $query); return $stmt->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { Logger::error('Query failed: ' . $query . ' | Error: ' . $e->getMessage()); throw $e; } } /** * Retrieves the PDO connection instance. * * @return PDO The PDO instance. */ public function getConnection(): PDO { return $this->connection; } }