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 26/12/2006, 01h03   #1
Membre habitué
 
Inscription : novembre 2004
Messages : 398
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 398
Points : 115
Points : 115
Par défaut [SQL] Analyser un fichier SQL

Salut

Je voudrais pasrser un fichier contenant des requêtes SQL (dans le genre des exportés depuis phpMyAdmin) afin de récupérer chacune des requêtes.

J'ai essayé avec une expression régulière mais ça ne fonctionne pas :

Code :
1
2
 
preg_match_all('#^(CREATE|INSERT|ALTER|DROP)([[:print:]]+)(;)$#mi', $str, $res);
J'ai aussi pensé à utiliser la fonction explode et d'utiliser ; comme séparateur mais le cas où des données contiendraient des ; , je suis dans la m...
A moins de vérifier que l'élément suivant du tableau est bien une nouvelle requête.


Merci d'avance pour votre aide

Joyeux Noël
JuTs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2006, 11h14   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
tu as besoin de faire ça pour quoi ?

Pour l'algorithme de découpage, tu peux regarder dans le code source de phpMyAdmin
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2006, 18h14   #3
Membre habitué
 
Inscription : novembre 2004
Messages : 398
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 398
Points : 115
Points : 115
L'une des fonctionnalité d'une application que je développe est la possibilité de sauvegarder/restaurer la base de données.

J'ai finalement procédé ainsi :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
<?php
            //séparation des requêtes
	    $lines = explode(";", $result);
 
            //suppression de la dernière ligne (vide)
	    array_pop($lines);
 
	    //on vérifie qu'on ait pas coupé la chaine au milieu d'une requête (si les données contiennent des ;)
	    $nb = count($lines);
	    for($i=0; $i<$nb; $i++) {
 
	    	$current = $i;
 
	    	//si la ligne suivante n'existe pas
	    	if(!isset($lines[$i+1])) {
	    		break;
	    	}
 
	    	//tant que la ligne suivante n'est pas le début d'une nouvelle requête
	    	while(strpos($lines[$i+1], "CREATE") === false 
	    			&& strpos($lines[$i+1], "DROP") === false 
	    			&& strpos($lines[$i+1], "ALTER") === false 
	    			&& strpos($lines[$i+1], "INSERT") === false) {
 
	    		$lines[$current] .= ';'.$lines[$i+1];
	    		unset($lines[$i+1]);
	    		$i++;
	    	}
	    }
?>
ça ne gère pas tous les cas de requêtes possibles avec mysql mais c'est suffisant pour mon application.


Si quelqu'un a tout de même une solution avec un regex, ça m'intéresse aussi.


A+
JuTs 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 00h09.


 
 
 
 
Partenaires

Hébergement Web