Bonjour,
Voici le problème :
Soit 2 serveurs:
-Source
-Destination
Sur chaque serveur une base de données (contenant chacune une table de structures identiques), soit:
-base_source (table_source)
-base_destination (table_destination)
L'objectif est de copier le contenu de base_source.table_source dans base_destination.table_destination
Je sais que c'est réalisable "à la main" dans phpmyadmin, mais mon second objectif c'est d'implémenter cette méthode pour un grand nombre de tables et de bases.
J'ai créée un script qui permet de faire cette opération sans problème mais sur le même serveur.
Voici le code qui permet de faire la copie (ce code est un peu plus complet que ce que j'ai décrit plus haut dans la mesure où il créé aussi les bases et les tables de destination):
Je vous épargne dans le code ci-dessus la gestions des variables de connexion aux bases (ça fonctionne bien).<?php
$link_src=mysql_connect($serveur_src,$loginbase_src,$mdpbase_src);
$link_dest=mysql_connect($serveur_dest,$loginbase_dest,$mdpbase_dest);
$new_base_name = "";
if($bdd_dest != ''){
$new_base_name = $bdd_dest;
}elseif($base_dest != ''){
$new_base_name = $base_dest;
}
if($new_base_name != '' and $bdd_src != ''){
//Vérification de l'unicité du nom de la base
$sql_bases="SHOW DATABASES;";
$query_bases=mysql_query($sql_bases,$link_src);
$numrows_bases=mysql_num_rows($query_bases);
$base_existe = '';
for($i=0;$i<$numrows_bases;$i++){
if($bdd_dest == mysql_result($query_bases,$i,'Database')){
$base_existe .= 'true';
}
}
if($base_existe != 'true'){
//Création de la nouvelle base de données
$sql="CREATE DATABASE ".$new_base_name." ;";
$query=mysql_query($sql,$link_dest) or die ("Impossible d'exécuter la requête : ".$sql);
}
$sql_liste_Tables="SHOW TABLES FROM ".$bdd_src.";";
$query_liste_Tables=mysql_query($sql_liste_Tables,$link_src);
$numrows_liste_Tables=mysql_num_rows($query_liste_Tables);
$sql = "--Création des tables--";
for($i=0;$i<$numrows_liste_Tables;$i++){
$table = mysql_result($query_liste_Tables,$i,'Tables_in_'.$bdd_src);
//Sélection de la nouvelle base.
mysql_select_db($new_base_name,$link_dest) or die("erreur BDD");
//Copie de chaque table
$sql_Tables="SHOW CREATE TABLE ".$bdd_src.".".$table.";";
$query_Tables=mysql_query($sql_Tables,$link_src);
$sql_creation = mysql_result($query_Tables,0,1);
$query_creation=mysql_query($sql_creation,$link_dest);
$sql .= "\n".$sql_creation;
//Sauvegarde des données de chaque table
$query_copy="INSERT INTO ".$new_base_name.".".$table." SELECT * FROM ".$bdd_src.".".$table." ;";
$results_copy=mysql_query($query_copy,$link_dest);
$sql .= "\n--Copie des données--";
$sql .= "\n".$query_copy;
}
echo"<div align=\"center\">Copie terminée.<br><br>Code SQL:<br><textarea name=\"textarea\" cols=\"80\" rows=\"10\">$sql</textarea></div>";
}else{
if($bdd_dest == '' and $base_dest ==''){
echo "<p class='StyleRougeGras' align='center'>Aucune base de données de destination n'a été déterminée</p>";
}elseif($bdd_src == ''){
echo "<p class='StyleRougeGras' align='center'>Aucune base de données source n'a été déterminée</p>";
}
}
?>
Mon problème ce situe à ce niveau:
//Sauvegarde des données de chaque table
$query_copy="INSERT INTO ".$new_base_name.".".$table." SELECT * FROM ".$bdd_src.".".$table." ;";
$results_copy=mysql_query($query_copy,$link_dest);
En fait ici on insère dans destination les valeurs d'un select fait dans source. Le problème c'est qu'on ne peut utiliser qu'un seul $link (une seule connexion).
Comment faire donc pour effectuer cette copie?
Merci.
Partager