exec( "CREATE TABLE IF NOT EXISTS schema_migrations ( filename VARCHAR(255) NOT NULL PRIMARY KEY, applied_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP )" ); $applied = $pdo->query("SELECT filename FROM schema_migrations")->fetchAll(PDO::FETCH_COLUMN); $files = glob($migrationsDir . '/*.sql') ?: []; $pending = fscash_pending_migrations($files, $applied); if (empty($pending)) { echo "Keine neuen Migrationen.\n"; exit(0); } foreach ($pending as $file) { $name = basename($file); echo "-> Migration $name ... "; $sql = file_get_contents($file); if ($sql === false || trim($sql) === '') { fwrite(STDERR, "\nMigration $name ist leer oder konnte nicht gelesen werden.\n"); exit(1); } try { $pdo->exec($sql); $stmt = $pdo->prepare("INSERT INTO schema_migrations (filename) VALUES (?)"); $stmt->execute([$name]); echo "OK\n"; } catch (Throwable $e) { fwrite(STDERR, "\nFEHLER bei $name: " . $e->getMessage() . "\n"); fwrite(STDERR, "Abbruch. Bereits erfolgreich angewendete Migrationen bleiben markiert, $name muss manuell geprueft werden.\n"); exit(1); } } echo "Alle Migrationen angewendet.\n";