6 votes

Comment puis-je synchroniser deux tables de base de données avec PHP ?

J'ai besoin d'utiliser PHP pour copier des données d'une base de données MySQL à une autre.

Je peux créer un tableau de toutes les valeurs à insérer dans l'autre base de données, mais je veux d'abord m'assurer que la base de données contient les bons champs avant de les insérer.

Par exemple, disons que je vais copier des données de la table A à la table B.

Je peux configurer la table B pour qu'elle ressemble à la table A mais, à l'avenir, je peux ajouter des colonnes à la table A et oublier de les ajouter à la table B, alors mon script PHP essaiera d'insérer des données dans une colonne qui n'existe pas dans la table B et il échouera.

Donc ce que je veux faire, c'est comparer la table A à la table B et toutes les colonnes que la table A possède et que la table B n'a pas, les ajouter à la table B.

Quelqu'un peut-il me dire comment faire ?

0voto

alexpopescu Points 7194

Il s'agit d'une tâche très complexe et, à ma connaissance, de nombreuses personnes ont essayé de la résoudre jusqu'à présent (malheureusement, je n'ai pas connaissance d'une solution garantie à 100%).

Je dirais qu'avant de vous lancer dans la mise en œuvre de votre propre solution, vous devriez jeter un coup d'œil et vous renseigner sur les défis auxquels vous serez confronté en lisant des articles sur l'évolution des schémas, le remaniement des schémas, le versionnement des schémas, etc.

Ensuite, vous pouvez jeter un coup d'œil à PHP MDB2_Schema (un peu plus de documentation dans ce article ).

Si vous n'êtes pas attaché à PHP, vous pouvez également jeter un coup d'œil à Sundog qui fournit un ensemble de remaniements de schémas avancés.

Une fois que vous disposerez d'un outil de migration de schémas fiable pour votre application, la migration des données ne sera qu'une tâche triviale.

./alex

0voto

Scott Points 3238

La façon la plus simple de procéder serait probablement de

$sql = "SELECT * FROM tableA WHERE 1"

$results = mysql_fetch_assoc($sql);

$sql = "truncate table tableB";

// run truncate

foreach($result as $update){

   $sql = "Insert into table b VALUES(....)"

   // run insert
}

Mais vous devez être extrêmement prudent ici. Assurez-vous que le seul processus qui peut écrire dans la table B est celui qui fait la copie de la table A, sinon vous aurez perdu des données. Assurez-vous également que rien ne peut écrire dans la table A une fois que ce processus a commencé.

La meilleure pratique pour cela serait de ne pas le faire en php mais plutôt via la réplication mysql.

0voto

jacekll Points 170

Utilisez l'outil TOAD for MySQL Schema compare, il examinera les tables, vous montrera les différences visuellement et générera des requêtes SQL pour synchroniser la structure des tables. Il permet également de comparer les données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X