IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Synchronisation de base de données MySQL en PHP [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 84
    Points : 56
    Points
    56
    Par défaut Synchronisation de base de données MySQL en PHP
    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. #2
    Membre averti Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Points : 301
    Points
    301
    Par défaut
    - 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 :

    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");
    ?>
    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
     
    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;
    	}
    en espérant t'aider...

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 84
    Points : 56
    Points
    56
    Par défaut
    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.

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 84
    Points : 56
    Points
    56
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/10/2012, 15h19
  2. Réponses: 3
    Dernier message: 19/03/2012, 02h24
  3. [MySQL] Requête pour vérifier base de donné Mysql en php
    Par srab2pac dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 13/06/2008, 09h48
  4. [MySQL] probleme de replication de base donnée mysql avec php
    Par christclamard dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/02/2008, 20h42
  5. Problème de copie d'une base de données MySQL avec PHP
    Par rheem dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 15/10/2007, 14h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo