diff --git a/server/tools/migrate.php b/server/tools/migrate.php new file mode 100644 index 0000000..11f65ee --- /dev/null +++ b/server/tools/migrate.php @@ -0,0 +1,94 @@ + PDO::ERRMODE_EXCEPTION, + PDO::ATTR_EMULATE_PREPARES => false, + ] + ); + out("Connexion DB OK"); +} catch (Exception $e) { + out("ÉCHEC connexion : " . $e->getMessage()); + exit(2); +} + +$migrationsDir = dirname(__DIR__) . '/migrations'; +$files = glob("$migrationsDir/*.sql") ?: []; +sort($files); + +if (!$files) { + out("Aucun fichier SQL dans $migrationsDir"); + exit(0); +} + +foreach ($files as $f) { + out(""); + out("--- " . basename($f) . " ---"); + $sql = file_get_contents($f); + // Découpe naïve sur les ';' suivis d'un saut de ligne (suffit pour notre schéma) + $statements = array_filter(array_map('trim', preg_split('/;\s*\n/', $sql) ?: [])); + foreach ($statements as $stmt) { + if ($stmt === '' || str_starts_with($stmt, '--')) continue; + try { + $pdo->exec($stmt); + $first40 = substr(preg_replace('/\s+/', ' ', $stmt), 0, 60); + out(" ✔ " . $first40 . "…"); + } catch (Exception $e) { + out(" ✘ ERREUR : " . $e->getMessage()); + out(" Sur : " . substr($stmt, 0, 80) . "…"); + exit(3); + } + } +} + +out(""); +out("=== Migration terminée. Tables présentes ==="); +$tables = $pdo->query("SHOW TABLES")->fetchAll(PDO::FETCH_COLUMN); +foreach ($tables as $t) out(" - $t"); + +if (!$cli) { + out(""); + out("⚠ Pour la sécurité, supprime maintenant tools/migrate.php du serveur."); +}