PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ]); // Crée la table de suivi si elle n'existe pas encore $pdo->exec(' CREATE TABLE IF NOT EXISTS schema_migrations ( name TEXT NOT NULL PRIMARY KEY, applied_at TIMESTAMP NOT NULL DEFAULT NOW() ) '); // Migrations déjà appliquées $applied = array_flip( $pdo->query('SELECT name FROM schema_migrations ORDER BY name') ->fetchAll(PDO::FETCH_COLUMN) ); // Fichiers de migration dans le même dossier, triés par nom $files = glob(__DIR__ . '/migration_*.sql') ?: []; sort($files); $count = 0; foreach ($files as $file) { $name = basename($file); if (isset($applied[$name])) { continue; } $sql = file_get_contents($file); if ($sql === false || trim($sql) === '') { echo " ⚠ $name : fichier vide ou illisible, ignoré\n"; continue; } echo " → $name ... "; $pdo->exec($sql); $pdo->prepare('INSERT INTO schema_migrations (name) VALUES (?)') ->execute([$name]); echo "✓\n"; $count++; } if ($count === 0) { echo " (aucune migration en attente)\n"; } else { echo " $count migration(s) appliquée(s).\n"; }