Page 1 sur 2

Copier une base de données avec PHP

Posté : 11 oct. 2007, 12:29
par reem
Bonjour à tous,

Je voudrais copier une base de données MySQL d'un serveur à un autre avec PHP (sans acceder à l'outil PhpMyAdmin). Comment pourrais-je générer le fichier qui contient les instructions nécessaires pour reconstruire la base de données ?

Merci pour votre aide.

Posté : 12 oct. 2007, 11:36
par dasou
Salut tout le monde,
j'ai le même souci, j'attends vos réponses SVP
Merci d'avance

Posté : 12 oct. 2007, 11:46
par d0m
en php tu peux :
- lister les tables d'une base
- selectionner leurs champs
- selectionner les données d'une table

et d'autre part :
- créer des tables
- insérer des données

il suffit donc pour chaque table de la base à copier de lister les champs,
créer la table sur la nouvelle base,
selectionner toutes les données de la table à copier et les insérer dans la nouvelle table.

Posté : 12 oct. 2007, 11:54
par reem
bonjour,

Je vous remercie pour votre réponse. Je voudrais générer un fichier .sql qui serait exécuté sur le serveur de destination, tout comme le fait le SQL Dump de PhpMyAdmin. Est-ce qu'il y a un moyen de le faire avec une instruction php ? Je donne le nom de la base de données et il me génère un fichier .sql qui contient toutes les informations qu'il faut pour reconstruire la base de données (structure et contenu) dans l'autre serveur.

Merci beaucoup pour votre aide.

Posté : 12 oct. 2007, 12:06
par d0m
il me sembl que le fichier .sql est une suite de requête :

Code : Tout sélectionner

CREATE table ..... INSERT INTO ... .....
il suffit donc :
- d'ouvrir en écriture un fichier de nom blablabla.sql
- à partir de ta base, lister les tables avec leurs champs
- écrire dans le fichier blablabla les requêtes SQL de création de table correspondants aux tables listées
- pour chaque table sélectionner toutes les lignes
- pour chaque ligne écrire dans le fichier blablabla la requête SQL correspondant à l'insertion de la ligne dans la table

et voilà, il faut donc faire un script qui automatise ça.

Posté : 12 oct. 2007, 12:11
par dasou
bonjour,
merci pour les réponses, j'aimerais savoir comment lister les tables avec leurs champs sous forme de requêtes SQL

Posté : 12 oct. 2007, 12:44
par d0m
j'aimerais savoir comment lister les tables avec leurs champs sous forme de requêtes SQL
pour les lister va voir du coté de la fonction mysql_fetch_field dans le manuel
ensuite, les requêtes il faut les créer à partir de ces données sous forme de chaines de caractère.

Posté : 12 oct. 2007, 12:49
par reem
oui mais comment faire des requêtes SQL avec ? Il n'y a pas une fonction qui le fait directement ?

Posté : 12 oct. 2007, 12:50
par iclo
Aller jeter un coup d'oeil dans le code de phpMyAdmin, pour s'inspirer peut également être intéressant...

Posté : 12 oct. 2007, 12:52
par Tracker
Pourquoi ne pas exécuter mysqldump depuis php pour copier la base ?

Posté : 12 oct. 2007, 12:56
par reem
iclo > Le problème c'est comment trouver le fichier qui le fait puisque PhpMyAdmin est fait avec les frames :?
c'est toujours "http://localhost/mysql/" quelque soit la page

Tracker > C'est ce que je veux exactement, mais comment le faire ?

Posté : 12 oct. 2007, 13:02
par Tracker
iclo > Le problème c'est comment trouver le fichier qui le fait puisque PhpMyAdmin est fait avec les frames :?
c'est toujours "http://localhost/mysql/" quelque soit la page

Tracker > C'est ce que je veux exactement, mais comment le faire ?
Je répondrai naïvement avec la fonction:
string exec ( string command [, array &output [, int &return_var]] )
Regarde dans la doc la rubrique "Exécution de programmes externes" pour plus d'info...

[edit]
En même temps c'est pas évident que ton hébergeur autorise ce type de manip...

Posté : 12 oct. 2007, 13:07
par Berzemus
iclo > Le problème c'est comment trouver le fichier qui le fait puisque PhpMyAdmin est fait avec les frames :?
c'est toujours "http://localhost/mysql/" quelque soit la page
Si rien que ça c'est déjà un problême, le reste va être chaud chaud..

hint: click droit dans le cadre, et n'afficher que le cadre (sous FF)

Ou tout simplement, lire le html.. (ctrl-u sous FF, affichage -> source sous IE)

Posté : 12 oct. 2007, 13:11
par reem
ça serait vraiment super si je peux exécuter mysqldump avec cette fonction, mais je ne sais pas quoi mettre dans "command" :(

Posté : 12 oct. 2007, 14:36
par Berzemus
Sans vouloir être arrogant, mais tu as cherché un peu ?

C'est en chercheant des solutions qu'on apprend le plus, pas en attendant que tombe la solution toute faite.

Une simple recherche avec google peut déjà fournir une ribambelle de pistes.