pdo = new PDO( "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=utf8mb4", DB_USER, DB_PASS, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false ] ); } catch (PDOException $e) { die("Datenbankverbindung fehlgeschlagen: " . $e->getMessage()); } } public static function getInstance() { if (self::$instance === null) { self::$instance = new self(); } return self::$instance; } public function getConnection() { return $this->pdo; } // Helper-Methode für Queries public function query($sql, $params = []) { $stmt = $this->pdo->prepare($sql); $stmt->execute($params); return $stmt; } // Helper für einzelnen Datensatz public function fetchOne($sql, $params = []) { $stmt = $this->query($sql, $params); return $stmt->fetch(); } // Helper für mehrere Datensätze public function fetchAll($sql, $params = []) { $stmt = $this->query($sql, $params); return $stmt->fetchAll(); } // Helper für Insert/Update mit Rückgabe der ID public function execute($sql, $params = []) { $this->query($sql, $params); return $this->pdo->lastInsertId(); } // Settings-Helper public function getSetting($key, $default = null) { if (array_key_exists($key, $this->settingsCache)) { return $this->settingsCache[$key] ?? $default; } $result = $this->fetchOne("SELECT setting_value FROM settings WHERE setting_key = ?", [$key]); $value = $result ? $result['setting_value'] : null; $this->settingsCache[$key] = $value; return $value ?? $default; } public function setSetting($key, $value) { $this->query( "INSERT INTO settings (setting_key, setting_value) VALUES (?, ?) ON DUPLICATE KEY UPDATE setting_value = VALUES(setting_value)", [$key, $value] ); $this->settingsCache[$key] = $value; } }