getConnection(); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); if ($isRollback) { // ── ROLLBACK ───────────────────────────────────────────────────────── foreach ($rollback as $sql) { $table = preg_replace('/.*`(lab_\w+)`.*/', '$1', $sql); $pdo->exec($sql); echo " βœ… DROP $table\n"; } echo "\n βœ” Rollback completado correctamente.\n\n"; } else { // ── MIGRACIΓ“N ──────────────────────────────────────────────────────── $dir = __DIR__; foreach ($migrations as $file) { $path = "$dir/$file"; if (!file_exists($path)) { echo " ⚠️ Archivo no encontrado: $file (omitido)\n"; continue; } $sql = file_get_contents($path); // Separar sentencias por ';' pero solo las CREATE TABLE // (Los archivos contienen una sola sentencia CREATE TABLE) $pdo->exec($sql); // Extraer nombre de tabla del archivo para feedback preg_match('/CREATE TABLE IF NOT EXISTS `(\w+)`/i', $sql, $m); $table = $m[1] ?? $file; echo " βœ… $table\n"; } echo "\n$line\n"; echo " βœ” Todas las migraciones ejecutadas correctamente.\n"; echo "$line\n\n"; // ── Tabla de control de migraciones ejecutadas en system_logs ──────── try { $pdo->prepare(" INSERT INTO system_logs (level, message, context, created_at) VALUES ('info', 'lab_module_migration', ?, NOW()) ")->execute([json_encode([ 'version' => '20260302', 'module' => 'lab_admin', 'tables' => 7, 'executed' => date('Y-m-d H:i:s'), ])]); } catch (Exception $e) { // system_logs puede no tener estas columnas β€” no falla la migraciΓ³n } } } catch (PDOException $e) { echo "\n ❌ ERROR: " . $e->getMessage() . "\n\n"; echo " Ejecuta --rollback para deshacer los cambios parciales.\n\n"; exit(1); }