pdo = new PDO($dsn, DB_USER, DB_PASS, DB_OPTIONS); } catch (PDOException $e) { if (ENVIRONMENT === 'development') { die("Database connection failed: " . $e->getMessage()); } else { die("Database connection failed. Please try again later."); } } } public static function getInstance() { if (self::$instance === null) { self::$instance = new self(); } return self::$instance; } public function getConnection() { return $this->pdo; } public function query($sql, $params = []) { $stmt = $this->pdo->prepare($sql); $stmt->execute($params); return $stmt; } public function fetch($sql, $params = []) { return $this->query($sql, $params)->fetch(); } public function fetchAll($sql, $params = []) { return $this->query($sql, $params)->fetchAll(); } public function insert($table, $data) { $columns = implode(', ', array_keys($data)); $placeholders = ':' . implode(', :', array_keys($data)); $sql = "INSERT INTO {$table} ({$columns}) VALUES ({$placeholders})"; $this->query($sql, $data); return $this->pdo->lastInsertId(); } public function update($table, $data, $where, $whereParams = []) { $set = []; foreach (array_keys($data) as $column) { $set[] = "{$column} = :{$column}"; } $setString = implode(', ', $set); $sql = "UPDATE {$table} SET {$setString} WHERE {$where}"; return $this->query($sql, array_merge($data, $whereParams))->rowCount(); } public function delete($table, $where, $params = []) { $sql = "DELETE FROM {$table} WHERE {$where}"; return $this->query($sql, $params)->rowCount(); } public function count($table, $where = '1=1', $params = []) { $sql = "SELECT COUNT(*) as count FROM {$table} WHERE {$where}"; $result = $this->fetch($sql, $params); return $result['count'] ?? 0; } public function lastInsertId() { return $this->pdo->lastInsertId(); } public function beginTransaction() { return $this->pdo->beginTransaction(); } public function commit() { return $this->pdo->commit(); } public function rollback() { return $this->pdo->rollBack(); } } // Helper function to get database instance function db() { return Database::getInstance(); }