Bonjour à tous,
Voila mon soucis, je voudrais savoir comment faire en php pour synchroniser une base de données MYSQL locale avec une base de données MYSQL distant?????
Merci d'avance pour vos réponse.
Bonjour à tous,
Voila mon soucis, je voudrais savoir comment faire en php pour synchroniser une base de données MYSQL locale avec une base de données MYSQL distant?????
Merci d'avance pour vos réponse.
- 2 connexions (locale et distante)
- tu parcours ta base locale pour recupere toutes les tables. tu mets ces tables dans un tableau (attention à l'ordre de tes tables si tu as des contraintres d'intégritées).
- ensuite tu vide ta base distante (le mieux c'est de faire appel a un script qui supprime toutes les tables et les recréées pour remettre les index à 0)
- ensuite tu fais une boucle sur le tableau de table que tu as recuperé en local.
- pour chaque iterations tu fais un select * de la table.
- il faut ensuite faire l'insertion dans la table distante (faire attention aux types des champs)
et le tour est joué.
je viens de faire un script aujourd'hui pour faire la meme chose.
il faut bien evidement que tes deux base de donnees aient la meme structure.
voila mon code :
Les methodes utilisées :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?php session_start(); /* connections */ $obj_bckp = new CnxASAP($host, $account, $passwd, $db_array['Backup']); $obj_prim = new CnxASAP($host, $account, $passwd, $db_array['Primary']); if (isset($_SESSION['id_user']) && isset($_POST['nb_record']) && isset($_POST['comment_bckp'])){ /* we put in an array all the tables that we have to fill */ $list_table = $obj_prim->getListTable(); /* before all we have to delete all the data into the backup db */ include_once('truncate_db.php'); /* for each table */ for ($i = 0 ; $i < count($list_table) ; $i++){ $nb_fields = $obj_prim->getNbfield($list_table[$i]); // number of field $info = $obj_prim->getInfoTable($list_table[$i]); //info table $list = ''; $type = array(); /* list of field */ for ($j = 0 ; $j < count($info) ; $j++){ $list .= '`'.$info[$j]['name'].'`, '; $type[strtolower($info[$j]['name'])] = $info[$j]['type']; } $list = '('.substr($list, 0, (strlen($list)-2)).')'; /*echo '<br>'.$list_table[$i]; echo '<pre>'; print_r($type); echo '</pre>';*/ /* first part of the query */ $sql_bckp = "INSERT INTO `".$list_table[$i]."` ".$list." VALUES ("; /* now we have to loop on the data of the primary */ $result = $obj_prim->select("SELECT * FROM `".$list_table[$i]."`",'asso'); $value_sql = ''; for ($k = 0 ; $k < count($result) ; $k++){ foreach ($result[$k] as $key => $value){ if (strtolower($type[strtolower($key)]) == 'string' || strtolower($type[strtolower($key)]) == 'time') $value_sql .="'".addslashes($value)."', "; else { if ($value == '' || $value == null) $value_sql .= "NULL, "; else $value_sql .= $value.", "; } } $value_sql = substr($value_sql, 0, (strlen($value_sql)-2)).'), ('; } $value_sql = substr($value_sql, 0, (strlen($value_sql)-3)); $sql_bckp .= $value_sql; /* Execution of the querry */ $obj_bckp->exec($sql_bckp); } /* record the information about this backup */ $sql = "INSERT INTO `backup_info` (`tmstp_bckp`,`id_user`,`nb_rec_bckp`,`comment_bckp`) VALUES (NOW(), ".$_SESSION['id_user'].", ".$_POST['nb_record'].", '".addslashes($_POST['comment_bckp'])."')"; $obj_prim->exec($sql); $obj_bckp->exec($sql); header("Location:manage_page.php"); } else header("Location:manage_page.php"); ?>
en espérant t'aider...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 function getListTable(){ return $this->select("SHOW TABLES", 'colonne'); } function getNbfield($table){ $result = $this->select("DESCRIBE `".$table."`", 'asso'); return count($result); } function getInfoTable($table){ $result = mysql_query("SELECT * FROM ".$table); $nb_fields = mysql_num_fields($result); $info = array(); for ($i=0; $i < $nb_fields; $i++){ $info[$i]['type'] = mysql_field_type($result, $i); $info[$i]['name'] = mysql_field_name($result, $i); $info[$i]['len'] = mysql_field_len($result, $i); $info[$i]['flags'] = mysql_field_flags($result, $i); } return $info; }
Merci max44410 je vais étudié ton code avec attention car il pourrait me servir énormément. Je te tien au courant dans mon avancement. Encore une fois merci max44410.
Il ne faut pas que je vide ma base distant c'est sa mon probléme justement ces qu'il faut que ma base local met à jour ma base distant mais faut aussi que ma base distant met à jour ma base local s'il un produit a été vendu car ces pour mon site E-commerce que je pose cette kestion.
Si vous ne comprenez pas hésiter pas a me redemander.
Merci d'avance pour vos réponse et désoler pour les fautes d'ortographe.
Partager