1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| <?php
require('librairie/dump.php');
//compare les deux bases et renvoye une chaine contenant le dump de la base synchronisée
//on choisit si on veut synchronisé la structure et si on veut synchroniser les données
function synchronisation($server,$login,$password,$base,$base_compare, $donnees = false,$structure = false){
$dump = null;
if($structure == true){
//traitement des structure de tables
$liste_tables_base = mysql_list_tables($base);
$liste_tables_base_compare = mysql_list_tables($base_compare);
//je prends l'élément de la premiere base et je regarde si il est dans la deuxième
for($i=0;$i<mysql_num_rows($liste_tables_base);$i++){
$egale = false;
for($j=0;$j<mysql_num_rows($liste_tables_base_compare);$j++){
if(mysql_tablename($liste_tables_base, $i) == mysql_tablename($liste_tables_base_compare, $j)){
$egale = true;
$num = $j;
break;
}
}
if($egale == false){
//la table n'existe pas dans les deux bases, je la crée donc dans $base_compare
mysql_selectdb($base);//selectionne la base
$create= mysql_query("SHOW CREATE TABLE ".mysql_tablename($liste_tables_base, $i)) or die('ERREUR : '.mysql_error());//recupere la requete de création de la table
$tableau = mysql_fetch_array($create);
$tableau[1] .= ";";
mysql_selectdb($base_compare);//selectionne la base
mysql_query($tableau[1]) or die('ERREUR : '.mysql_error());
}
}
}
if($structure == true){
//traitement des données de tables
$liste_tables_base = mysql_list_tables($base);
for($i=0;$i<mysql_num_rows($liste_tables_base);$i++){
$table_name = mysql_tablename($liste_tables_base, $i);
mysql_selectdb($base);//selectionne la base
$query = "SELECT * FROM ".$table_name;//recupere les données dans $base
$result = mysql_query($query) or die('ERREUR : '.mysql_error());
mysql_selectdb($base_compare);//selectionne la base
$query1 = "SHOW COLUMNS FROM ".$table_name;
$result1 = mysql_query($query1);
$nbr_champ = mysql_num_rows($result1);
unset($champ);
while($row = mysql_fetch_array($result1)) {
$champ[] = $row['Field'];//recupere le nom des champs
}
while($data = mysql_fetch_array($result)){
$query2 = "SELECT * FROM ".$table_name." WHERE ".$champ[0]." = ".$data[0];//cherche la ligne de $base dans $base_compare
$result2 = mysql_query($query2) or die('ERREUR : '.mysql_error());
if(mysql_num_rows($result2) == 0){
//si ca ne renvoye rien c'est que la ligne n'est pas dans $base_compare
//création de la requete d'insertion
$query3 = "INSERT INTO ".$table_name." VALUES ('".addslashes($data[0])."'";
for($j=1;$j<$nbr_champ;$j++){
$query3 .= ",'".addslashes($data[$j])."'";
}
$query3 .= ")";
//fin de création de la requete
mysql_query($query3) or die('ERREUR : '.mysql_error());
}
//si ca renvoye quelque chose c'est que l'enregistrement est déjà dans $base_compare, il faut vérifier que c'est le même.
//les tables ou la base local a raison en cas de modification
elseif($table_name == 'address_book' || $table_name == 'customers' || $table_name == 'customers_info' ||
$table_name == 'orders' || $table_name == 'orders_products' ||
$table_name == 'orders_products_attribute' || $table_name == 'products_groups'){
//comparer si les valeurs des champs sont égales
//si oui on fait rien
//si non on fait un update sur $bdd_compare
}
}
}
}
$dump = mysql_sauv($server,$login,$password,$base_compare);
return $dump;
}
?> |