Αν και υπάρχουν διάφορες εξειδικευμένες κλάσεις και εφαρμογές για αυτό, στις μικρές εφαρμογές πολλές φορές απλά κάνουμε overwrite τα αρχεία με αυτά της νέας έκδοσης.
Τι γίνεται όμως με τις αλλαγές που κάνουμε στο σχήμα της βάσης δεδομένων; Αυτό είναι ένα πρόβλημα το οποίο έχει λυθεί με πολύ απλό τρόπο σε διάφορες έτοιμες εφαρμογές όπως π.χ. το wordpress που αναβαθμίζεται με ένα απλό overwrite (αν και δεν είναι η πιο ασφαλής λύση

Παρακάτω λοιπόν έχω έναν πολύ απλό τρόπο για να πετύχουμε κάτι παρόμοιο:
Αρχικά δημιουργούμε στη βάση μας ένα table:
Κώδικας: Επιλογή όλων
CREATE TABLE IF NOT EXISTS `dbversion` (
`when` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`ver` varchar(255) NOT NULL,
PRIMARY KEY (`ver`)
)
Η λογική μας είναι ότι κάθε φορά που τρέχει η εφαρμογή, κάνει έναν έλεγχο σε αυτό το table αν έχουν περαστεί όλες οι τελευταίες αλλαγές.
Έτσι ουσιαστικά χρειαζόματε δύο functions, μια για να ελέγχει την έκδοση και μια για να κάνει τις απαραίτητες αναβαθμίσεις αν κριθεί απαραίτητο.
Η μια ελέγχει απλά για την τελευταία έκδοση, η δεύτερη έχει περασμένες χρονολογικά όλες τις αλλαγές που χρειάζονται, ώστε αν για κάποιον λόγο πηδήξουμε μια έκδοση, να περάσει όλα τα updates σωστά.
Ας δούμε λοιπόν ενδεικτικό κώδικα. Δεν ασχολούμαι με σύνδεση με τη βάση δεδομένων, αφού αυτό θα το έχετε ήδη υλοποιήσει, οπότε μπορείτε να αντικαταστήσετε τις functions παρακάτω με κάτι που ταιριάζει στην εφαρμογή σας (αν π.χ. χρησιμοποιείτε κάποια κλάση για σύνδεση στη βάση με δικές τις functions για τα select).
Κώδικας: Επιλογή όλων
function checkversion($version=''){
if ($version == ''){
$version = '1.000'; //Αυτό το σημείο το αλλάζουμε σε κάθε έκδοση. Μπορούμε να το κάνουμε να διαβάζεται από κάποιο αρχείο.
}
$result = mysql_query("SELECT * FROM `dbversion` where `ver` = '$version' limit 1")
or die(mysql_error());
if (mysql_num_rows($result) == 0){
return false; //Δεν έχει περαστεί στη βάση ότι έχει γίνει αυτή η αλλαγή, οπότε γυρνάει false
}
return true;
}
Κώδικας: Επιλογή όλων
function upgrade(){
if (checkversion('1.000') === false){
mysql_query("CREATE TABLE μπλα μπλα μπλα"); // Εδώ βάζουμε ότι αλλαγες θέλουμε
mysql_query("insert into `dbversion` (`ver`) values ('1.000')"); //Ενημερώνουμε ότι έγινε η αλλαγή ώστε να μην ξαναπροσπαθεί η εφαρμογή κάθε φορά
}
return true;
}
Έτσι, ουσιαστικά το μόνο που έχουμε να κάνουμε είναι στην αρχή της εφαρμογή μας να καλούμε την checkversion και η βάση μας θα είναι πάντα ενημερωμένη. Καλό είναι βέβαια να προσθέσουμε και μια extra function που να βάζει το site σε maintainance mode και να κάνει κάποιο backup της βάσης πρώτα, αλλά έτσι κι αλλιώς το tutorial είναι για να πάρουμε μια ιδέα.
Σημειώστε ότι αυτό λειτουργεί σωστά μόνο αν η εφαρμογή έχει το table από την αρχή, αλλιώς θα πετάξει error. Αν θέλουμε να προσθέσουμε αυτή τη λειτουργικότητα σε μια υπάρχουσα εφαρμογή, τότε πολύ απλά προσθέτουμε έναν παραπάνω έλεγχο στην checkversion, ο οποίος όμως πρέπει να τρέχει πρώτος. Κάτι τέτοιο:
Κώδικας: Επιλογή όλων
$result = mysql_query("SHOW TABLES FROM `dbname` = 'dbversion'")
or die(mysql_error());
if (mysql_num_rows($result) == 0){
mysql_query("CREATE TABLE IF NOT EXISTS `dbversion` (
`when` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`ver` varchar(255) NOT NULL,
PRIMARY KEY (`ver`)
) ");
}
Ξεκινόντας με αυτή τη λογική μπορείτε να αναπτύξετε πολύ πιο πολύπλοκους τρόπους αναβάθμισης της εφαρμογής.
Happy Coding!