Database = $Database; } function Check() { ksort($this->Updates); $this->Database->query('CREATE TABLE IF NOT EXISTS `SystemVersion` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `Version` varchar(255) NOT NULL, `InstallTime` DATETIME NOT NULL, PRIMARY KEY (`Id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;'); $DbResult = $this->Database->query('SELECT `Version` FROM `SystemVersion` WHERE `Id`=1'); if($DbResult->num_rows > 0) { $DbRow = $DbResult->fetch_assoc(); $this->VersionInDb = $DbRow['Version']; echo('DbVersion: '.$this->VersionInDb."\r\n"); $this->Update(); } else { $this->VersionInDb = key(array_slice($this->Updates, -1, 1, TRUE)); echo('Importing full structure'."\r\n"); echo('DbVersion: '.$this->VersionInDb."\r\n"); $this->Database->query($this->FullStructure); $this->Database->insert('SystemVersion', array('Id' => 1, 'Version' => $this->VersionInDb, 'InstallTime' => 'NOW()')); } } function Update() { $I = $this->VersionInDb; $I++; while(true) { if(array_key_exists($I, $this->Updates)) { echo('Update '.$I.': '.$this->Updates[$I]."\r\n"); $this->Database->query($this->Updates[$I]); $this->Database->update('SystemVersion', '`Id`=1', array('Version' => $I, 'InstallTime' => 'NOW()')); $I++; } else break; } } } class Application { function CheckVersion() { $DatabaseVersioning = new DatabaseVersioning($this->Database); $DatabaseVersioning->FullStructure = 'CREATE TABLE IF NOT EXISTS `Server` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `Name` varchar(255) NOT NULL, `IpAddress` varchar(16) NOT NULL, PRIMARY KEY (`Id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `User` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `Name` varchar(255) NOT NULL, `Password` varchar(255) NOT NULL, `FullName` varchar(255) NOT NULL, PRIMARY KEY (`Id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;'; $DatabaseVersioning->Updates = array( 1 => 'CREATE TABLE `updater`.`Server` ( `Id` INT NOT NULL AUTO_INCREMENT , `Name` VARCHAR( 255 ) NOT NULL , PRIMARY KEY ( `Id` ) ) ENGINE = InnoDB;', 2 => 'ALTER TABLE `Server` ADD `IpAddress` VARCHAR( 16 ) NOT NULL;', 3 => 'CREATE TABLE `updater`.`User` ( `Id` INT NOT NULL AUTO_INCREMENT , `Name` VARCHAR( 255 ) NOT NULL , `Password` VARCHAR( 255 ) NOT NULL , PRIMARY KEY ( `Id` ) ) ENGINE = InnoDB;', 4 => 'ALTER TABLE `User` ADD `FullName` VARCHAR( 255 ) NOT NULL;', 5 => 'ALTER TABLE `User` ADD `RegistrationTime` DATETIME NOT NULL;', ); $DatabaseVersioning->Check(); } } $Application = new Application(); $Application->Database = new Database('localhost', 'updater', 'senoslama', 'updater'); $Application->CheckVersion(); ?>