"ALTER TABLE `matches` DROP FOREIGN KEY `fk_match_team1`", 'DROP FK fk_match_team2' => "ALTER TABLE `matches` DROP FOREIGN KEY `fk_match_team2`", 'DEFAULT Platform' => "ALTER TABLE `matches` MODIFY COLUMN `Platform` VARCHAR(50) NOT NULL DEFAULT 'PC'", 'DEFAULT MatchType' => "ALTER TABLE `matches` MODIFY COLUMN `MatchType` VARCHAR(50) NOT NULL DEFAULT 'przyjacielski'", 'ADD EndTime' => "ALTER TABLE `matches` ADD COLUMN `EndTime` DATETIME NULL AFTER `StartTime`", 'ADD Score' => "ALTER TABLE `matches` ADD COLUMN `Score` VARCHAR(50) NULL AFTER `Status`", 'ADD WinnerId' => "ALTER TABLE `matches` ADD COLUMN `WinnerId` BIGINT UNSIGNED NULL AFTER `Score`", 'ADD LoserId' => "ALTER TABLE `matches` ADD COLUMN `LoserId` BIGINT UNSIGNED NULL AFTER `WinnerId`", ]; foreach ($steps as $label => $sql) { try { $pdo->exec($sql); $log[] = ['ok', $label, 'OK']; } catch (PDOException $e) { $msg = $e->getMessage(); // Ignorujemy: "Can't DROP" (nie istnieje) i "Duplicate column name" if (strpos($msg, "Can't DROP") !== false || strpos($msg, 'Duplicate column name') !== false || strpos($msg, 'already exists') !== false) { $log[] = ['skip', $label, 'Pominieto (juz OK): ' . $msg]; } else { $log[] = ['err', $label, 'BLAD: ' . $msg]; } } } $done = true; } // Diagnostics $diag = []; try { $fks = $pdo->query( "SELECT CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'matches' AND REFERENCED_TABLE_NAME IS NOT NULL ORDER BY CONSTRAINT_NAME" )->fetchAll(PDO::FETCH_ASSOC); $diag['fks'] = $fks; } catch (Exception $e) { $diag['fks_err'] = $e->getMessage(); } try { $cols = $pdo->query( "SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_DEFAULT FROM information_schema.columns WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'matches' ORDER BY ORDINAL_POSITION" )->fetchAll(PDO::FETCH_ASSOC); $diag['cols'] = $cols; } catch (Exception $e) { $diag['cols_err'] = $e->getMessage(); } try { $mrCount = $pdo->query("SELECT COUNT(*) FROM match_results")->fetchColumn(); $diag['match_results_count'] = (int)$mrCount; } catch (Exception $e) { $diag['match_results_err'] = $e->getMessage(); } try { $mCount = $pdo->query("SELECT COUNT(*) FROM matches")->fetchColumn(); $diag['matches_count'] = (int)$mCount; } catch (Exception $e) { $diag['matches_err'] = $e->getMessage(); } function esc($s) { return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); } ?> Fix matches schema

Fix matches schema — jednorazowa migracja

Wyniki:

[]

Gotowe! Mozesz sprawdzic diagnostyke ponizej.


Co robi ten skrypt:
1. Usuwa klucze obce fk_match_team1 i fk_match_team2
2. Dodaje DEFAULT do kolumn Platform i MatchType
3. Dodaje brakujace kolumny EndTime, Score, WinnerId, LoserId

Diagnostyka — FK constraints w tabeli matches:

Brak FK constraints (juz ok).

CONSTRAINT_NAMECOLUMN_NAMEREFERENCED_TABLE

Kolumny tabeli matches:

COLUMN_NAMETYPENULLABLEDEFAULT

Ilosc rekordow:

matches:
match_results:

Ostatnie wyniki (match_results):

query("SELECT id, match_key, discipline, winner_username, loser_username, score, reason, ended_at FROM match_results ORDER BY id DESC LIMIT 10")->fetchAll(PDO::FETCH_ASSOC); echo ''; foreach ($rows as $r) { echo ''; foreach ($r as $v) echo ''; echo ''; } echo '
idmatch_keydisciplinewinnerloserscorereasonended_at
' . esc($v) . '
'; } catch (Exception $e) { echo '

' . esc($e->getMessage()) . '

'; } ?>