Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/05/2006, 15h17   #1
Membre à l'essai
 
Inscription : novembre 2003
Messages : 44
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 44
Points : 20
Points : 20
Par défaut [SQL] Importer un fichier sql depuis PHP

Bonjour,
J'aimerai pouvoir exécuter une suite de requêtes pour créer des tables SQL depuis un script php.
J'ai mes tables au format SQL exportées depuis phpmyadmin, du type:
Code :
1
2
3
4
5
6
7
8
9
10
11
-- --------------------------------------------------------
 
--
-- Table structure for table `flbx_taches`
--
 
CREATE TABLE `flbx_taches` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(100) NOT NULL default '',
  KEY `id` (`id`,`name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
J'ai essayé un simple mysql_query() sur une chaine de caractère contenant le tout, mais ça ne passe pas, il faut qu'une requête à la fois apparement.

J'ai aussi regardé du côté de LOAD DATA INFILE, mais il faut spécifier un nom de table pour y ajouter du contenu: ce n'est pas ce que je dois faire !

Y a-t-il une bonne façon de faire cela ?
Merci !
TNorth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2006, 15h24   #2
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
c'est toujour le meme fichier ou ca change sinon tu peut faire directement

Code :
1
2
3
 
$req="CREATE TABLE....."
mysql_query ($req)..
mais bon c 'est peut etre pas ca que tu cherche a faire...


et pour ta chaine de caractere contenant le tou normal que ca apsse pas mysql_query permet denvoyer qu'une rquete a la foi
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2006, 15h35   #3
Membre à l'essai
 
Inscription : novembre 2003
Messages : 44
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 44
Points : 20
Points : 20
C'est un fichier contenant plusieurs CREATE TABLE.

Il n'y a pas un moyen de le réimporter d'un coup, puisqu'on peut l'exporter à l'aide de mysqldump ? (mais pas depuis le shell, depuis php !)

Sinon il faut que je me tape le parsing et que je fasse une requête par truc....
TNorth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2006, 15h40   #4
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
Citation:
Envoyé par TNorth
C'est un fichier contenant plusieurs CREATE TABLE.

Il n'y a pas un moyen de le réimporter d'un coup, puisqu'on peut l'exporter à l'aide de mysqldump ? (mais pas depuis le shell, depuis php !)

Sinon il faut que je me tape le parsing et que je fasse une requête par truc....
moi j'ai fais ca hier....mais bon que 8 tables....donc me sui fais un script avec une requete par table....j'ai pas cherché plus loin
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2006, 18h39   #5
Membre à l'essai
 
Inscription : novembre 2003
Messages : 44
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 44
Points : 20
Points : 20
Ok, voici comment j'ai résolu le prob (quick & dirty je l'admet)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$sql_file=file("tables.sql");
$i=0;
foreach($sql_file as $s) {
        $req[$i]=preg_replace("/^--.+$/", "", $s);
        $i++;
}
$num=count($req);
$data=array();
$j=0;
for ($i=0; $i<$num; $i++){
        if(preg_match("/^[^--].+[a-zA-Z].+$/", $req[$i])) { //ici ptet qu'un str_qqch serait plus rapide !
                $data[$j].=$req[$i];
        } else {
                $j++;
        }
}
foreach ($data as $d) {
        mysql_query($d) or die ("Impossible d'effectuer la requête: ".mysql_error());
}
TNorth est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h54.


 
 
 
 
Partenaires

Hébergement Web