#!/usr/bin/env php = 30) { fwrite(STDERR, "Datenbank nicht erreichbar: {$e->getMessage()}\n"); exit(1); } sleep(1); } } Database::execute( 'CREATE TABLE IF NOT EXISTS migrationen ( datei VARCHAR(255) NOT NULL, angewandt_am DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (datei) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci' ); $angewandt = array_column( Database::fetchAll('SELECT datei FROM migrationen'), 'datei' ); $dateien = glob(dirname(__DIR__) . '/migrations/*.sql') ?: []; sort($dateien); $neu = 0; foreach ($dateien as $pfad) { $name = basename($pfad); if (in_array($name, $angewandt, true)) { continue; } $sql = file_get_contents($pfad); if ($sql === false || trim($sql) === '') { fwrite(STDERR, "Übersprungen (leer oder nicht lesbar): {$name}\n"); continue; } try { // Mehrere Anweisungen je Datei: PDO::exec verarbeitet sie am Stück. Database::get()->exec($sql); Database::execute('INSERT INTO migrationen (datei) VALUES (?)', [$name]); echo "Eingespielt: {$name}\n"; $neu++; } catch (\PDOException $e) { fwrite(STDERR, "Fehler in {$name}: {$e->getMessage()}\n"); exit(1); } } echo $neu === 0 ? "Keine neuen Migrationen.\n" : "{$neu} Migration(en) eingespielt.\n";