Page 1 sur 1
Déplacer des données d'une base de donnée vers une autre.
Posté : 28 avr. 2016, 14:58
par Apokalypse
Bonjour à tous,
Actuellement en stage, et débutante PDO, je dois faire un script pour déplacer les données d'une base de donnée, d'une table précise et de champ précis vers une autre BDD avec des tables qui n'ont pas le même nom, ni les mêmes nom de champ, car la nouvelle est entièrement en anglais.
Du coup je bloque complètement, je pense que si je réussissais à en faire au moins un, les autres serait plus facile à enchainer (car oui j'ai pas mal de transfert à faire).
Du coup l'idée était :
$reponse = $bddManager->query('SELECT id, nom FROM langue');
$reponse->execute();
$req= $bddManager->fetchAll($reponse);
$requete = $bddLogis->prepare('INSERT INTO language (id, nom) VALUES :id, :name ', $req);
$requete->execute();
en gros l'idée était de récupérer le contenue qui m'intéresse de l'ancienne BDD, de parcourir le tableau et d'insérer les valeurs dans le parcours.
Je suis peut être, surement même à coté de la plaque donc si vous pouviez me guider, ce serait vraiment très sympas, ça me dépasse complètement.
Merci à vous.
Re: Déplacer des données d'une base de donnée vers une autre.
Posté : 28 avr. 2016, 16:13
par @rthur
Bonjour,
Il faut que tu décomposes ton script en 2 pour + de simplicité :
1) récupérer les données de l'ancienne base
2) insérer les données dans la nouvelle
Fait donc d'abord le 1) en affichant les données récupérées dans ta page PHP avec un simple echo ou print
La documentation PHP donne des exemples en général assez simple qui permettent de s'en inspirer :
https://secure.php.net/manual/fr/pdo.query.php
Une fois que ce sera fait, on passe au 2) crée une autre page PHP ou tu vas tester l'insertion de données dans la nouvelle base en indiquant en dur un exemple de données récupérées.
Et enfin le 3) ou tu combineras les deux scripts.
A noter il y a un petit piège : il faudra que tu établisses 2 connexions (une pour chaque base de données) et donc que tu n'ait pas les mêmes nom de variable ($bddManager dans ton cas devra avoir un nom différent pour l'une et l'autre connexion)
Re: Déplacer des données d'une base de donnée vers une autre.
Posté : 28 avr. 2016, 16:30
par Apokalypse
D'accord, je vais regarder pour faire ce que tu me demandes, je vais juste préciser une chose, j'ai 8 BDD avec pas mal de tables , beaucoup de contenus à récupérer (pour une table en particulière). J'ai du optimiser le tout pour n'avoir qu'une BDD à la fin c'est pour ça que du coup c'est un peu la galère XD.
Pour le 1) c'est donc du SELECT, je te fait ça maintenant.
Merci beaucoup de prendre du temps pour m'aider!
Re: Déplacer des données d'une base de donnée vers une autre.
Posté : 28 avr. 2016, 17:56
par Apokalypse
J'en ai pour 20ans donc je vais profiter d'avoir fini une BDD (la plus facile xD)
J'ai utilisé cette fonction :
function recupTableManager($nombdd,$req){
$selectTable = $nombdd->query($req);
while ($donnees = $selectTable->fetch()) {
echo $donnees['id'] .' ';
echo $donnees['nom'];
echo '<br>';
}
}
echo recupTableManager($bddManager, 'SELECT id, nom FROM langue');
Ce qui me donne bien un id et un nom, j'en ai fait 2 autres comme ça.
le echo ne servira qu'à vérifier, on est d'accord? Car déjà ça m'arrangera pour la fonction, ça m'évitera d'en avoir trop juste pour des '$donnees['X']' XD différentes, et surtout affiche + 20 000 champ d'un coup ça fait mal haha.
Quoiqu'il en soit les 3 selections, vont dans 3 tables différentes de ma nouvelle BDD.
Du coup étape suivante?
Re: Déplacer des données d'une base de donnée vers une autre.
Posté : 28 avr. 2016, 17:59
par or 1
il y a aussi moyen de faire
INSERT INTO language (id, nom) select id, nom FROM langue
qui évite d'executer 20 000 requetes.
si ces 2 tables ne sont pas dans la même bdd, alors une copie d'une table d'une bdd à l'autre.
il n'y a même pas besoin de php, tout peux se faire dans phpmyadmin.
Re: Déplacer des données d'une base de donnée vers une autre.
Posté : 29 avr. 2016, 09:55
par Apokalypse
Bonjour!
or 1 merci pour ta réponse, je suis obligé de faire un script, et par exemple j'ai 6 bdd (une pour chaque pays) avec des tables identiques, il n'y a que le contenue qui change : région,dpt etc.. (c'est plus complexe que ça mais c'est dans les grandes lignes XD), sachant que! certaines tables ont des champs qui iront dans deux tables différentes de ma nouvelle base de donnée . Du coup je vais me retrouver avec 6 bdd * nbtable identiques c à d 13 tables donc 78 bout de code identique avec comme seule différence le nom de la base de donnée.
J'aimerais vous montrer l'ancienne et la nouvelle nouvelle bdd, mais je n'ai pas le droit, par contre je peux en crée deux fausse qui reprend l'idée si ça peut aider à visualiser mon problème ^^ .
D'ailleurs pour le cas où j'ai 1 table (Région) qui as par exemple 3 champs, dont 2 qui iront dans une table de la nouvelle bdd, et l'autre champs dans une autre table. Je devrais faire du coup deux requêtes de SELECT différentes?
Je m'excuse si mes explications sont pas très claires, ne pas hésiter à me le faire savoir, car pour moi étant débutante c'est un cas complexe mais intéressant quand même haha!
Re: Déplacer des données d'une base de donnée vers une autre.
Posté : 29 avr. 2016, 14:35
par or 1
s'il faut faire un script, alors un script qui exécutes X requetes de ce type :
INSERT INTO bdd1.language (id, nom) select id, nom FROM bdd2.langue
cela fonctionne à partir du moment où l'utilisateur a les droits sur les 2 bases.
Re: Déplacer des données d'une base de donnée vers une autre.
Posté : 29 avr. 2016, 16:12
par Apokalypse
Merci encore or 1. En utilisant ta requête ça marche direct dans le phpmyadmin, sinon je ne sais pas pourquoi j'en ai qu'une qui fonctionne lorsque je lance le script.
Du coup sur le moment je me suis dit que je mettais tromper dans la requêtes pour les autres mais non car dans phpmyadmin ça marche donc ...
Du coup je sais pas, j'ai refait une fonction pour n'avoir qu'une ligne pour chaque requêtes :
function recupTableManager($nombdd,$req){
$req = $nombdd->prepare($req);
}
ça viendrait d'elle le problème?
Re: Déplacer des données d'une base de donnée vers une autre.
Posté : 02 mai 2016, 12:03
par Apokalypse
Bonjour à vous,
j'ai résolu le problème, j'avais oublié de mettre
$req->execute()
.. :'), mais j'aimerais savoir en plus si vous saviez comment "vérifier" si l'insert into à marcher, vu que le script sera toujours lancer en ligne de commande, il y aura donc des echos pour dire que ça a marcher ou non, si c'est déjà remplie aussi.
Je vois presque le bout du chemin de ce script \o/, bon si le lien entre tout ce bordel risque d'être vraiment plus fun, je me demande même si je devrais pas changer ou rajouter une clé étrangère dans une table.
Bonne journée, et merci encore!
Re: Déplacer des données d'une base de donnée vers une autre.
Posté : 02 mai 2016, 13:57
par @rthur
La fonction execute() de PDO retourne TRUE en cas de succès ou FALSE si une erreur survient.
Re: Déplacer des données d'une base de donnée vers une autre.
Posté : 30 mai 2016, 11:28
par Apokalypxe
Bonjour,
Je reviens vers vous car je suis face à un très gros problème, je m'en sort mal avec toutes ses bdd XD, j'aimerais savoir pourquoi cette requête ne marche pas :
UPDATE BDD_1.TABLE_1
SET TABLE_1.CHAMP_1= TABLE_2.CHAMP_1*, TABLE_1.CHAMP_2= TABLE_2.CHAMP_2*, TABLE_1.CHAMP_3= TABLE_2.CHAMP_3*
FROM BDD_1.TABLE_1
INNER JOIN BDD_2.TABLE_2 ON BDD_1.TABLE_1.id = BDD_2.TABLE_2.id
* => Correspond à la bdd 2
Elle doit normalement actualiser certains champ de la table_1 de ma bdd_1 grâce a la table_2 de la bdd_2.
Merci à vous pour le temps que vous utiliserez pour m'aider :/.
Re: Déplacer des données d'une base de donnée vers une autre.
Posté : 30 mai 2016, 15:04
par Apokalypxe
Je voudrais faire une précision, et poser une question par la même occasion.
J'ai essayé de faire le script qu'avec des requêtes (qui sont complexe pour moi) , il y a aussi une méthode en utilisant des variables, quelles méthodes est la plus optimiser, selon vous? Faire une suite de requêtes même complexe, ou utiliser des variable? J'ai essayer la méthode 2 en réutilisant la requête au dessus (découper cette fois ci)
1 -> Un Select sur ce qui m'intéresse de la BDD_2
2-> Un UPDATE dans une boucle foreach, où les variables sont les champs qui m'intéresse
Car en plus là je comprend pas j'ai réussi une première fois à insérer ce que je voulais sauf que bon primo ça me l'a pas fait entièrement ça c'est arrêter au bout d'une vingtaine de ligne (sur 99). Alors que lorsque j'ai fait un var_dump tout ce qui m'intéresser était bien présent.
Et lorsque j'ai voulu ajouter une autre table_2, ça n'a jamais voulu insérer. Donc je comprend pas trop alors que ma requête SELECT est là même que celle pour la table_1 XD
$depInfos = getInfos($bdd, 'SELECT champ_1, champ_2, champ_3, champ_4 FROM Table_1
(BDD_2)
Voilà désolé pour ce double post, mais je trouvez ça important de rajouter tout ça..
Bonne journée.