Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MLD D'UN BASE DE DONNÉES MYSQL OU SQLITE


Information sur la source

Catégorie :Base de données Classé sous : MLD, Reverse Ingenerinng, Analyse Niveau : Initié Date de création : 15/04/2008 Vu / téléchargé: 3 890 / 183

Note :
7,5 / 10 - par 2 personnes
7,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note


Description

Avec la croissance grandissante du "reverse ingenering", les programmeur ont de plus en plus souvent a faire des refontes de site internet, et donc pour cela, une refonte des bases de données associés. Seulement le travail de nos rédecesseur n'etant pas toujours bien commenté et documenté, voici un petit outil permettant de remedier a ce probleme.

Ce petit code permet d'afficher le MLD de la base de données contenue sur support MySQL ou SQLite.
 

Source

  • Version MySQL :
  • <?php
  • $data = SQL_MLDServer("127.0.0.1","root","");
  • echo $data;
  • function SQL_MLDServer($serveur,$user,$password){
  • $return="";
  • $id_sql = mysql_connect($serveur,$user,$password); //CONNECTION AU SERVEUR MYSQL
  • $db_list = mysql_list_dbs($id_sql); //LISTER LES BASES DE DONNEES
  • $count = mysql_num_rows($db_list); //NOMBRE DE BASE DE DONNEES
  • for($i=0;$i<$count;$i++){
  • $database = mysql_db_name($db_list, $i);
  • $return.="<br><br><font face=tahoma size=3><u><b>{$database}</b></u></font><br>";
  • mysql_select_db($database,$id_sql); //CONNECTION A LA BASE DE DONNEES SQL
  • $pointeur = mysql_query("SHOW TABLES FROM $database;",$id_sql); //LISTER LES TABLES
  • $nbline = mysql_affected_rows($id_sql); //NOMBRES DE TABLES
  • for($j=0;$j<$nbline;$j++){
  • $return.="<br><font face=tahoma size=2><b>" . mysql_result($pointeur,$j,0) . "</b></font>";
  • $list_fields = @mysql_list_fields($database, mysql_result($pointeur,$j,0), $id_sql); //LISTER LES CHAMPS
  • $nbcolumntab = @mysql_num_fields($list_fields); //NOMBRE DE CHAMPS
  • if($nbcolumntab>0){ //SI ON TROUVE AU MOINS UN CHAMPS
  • $return.="<font face=tahoma size=1>(<br></font>";
  • for($k=0;$k<$nbcolumntab;$k++){
  • $return.= "<font face=tahoma size=1>" . mysql_field_name($list_fields, $k) . "
  • " . SQLLexic(mysql_field_type($list_fields, $k)) . "
  • (" . mysql_field_len($list_fields, $k) . ")
  • " . SQLLexic(mysql_field_flags($list_fields, $k)) . "</font>";
  • if($k<$nbcolumntab-1){ $return.="<font face=tahoma size=1>,<br></font>";}
  • }
  • $return.="<font face=tahoma size=1>);<br></font>";
  • } else {
  • $return.="<font face=tahoma size=1 color=red>[No fields]</font>";
  • }
  • }
  • }
  • return $return;
  • }
  • function SQLLexic($chaine){
  • $chaine = str_replace( "string" ,"VARCHAR" ,$chaine);
  • $chaine = str_replace( "int" ,"INTEGER" ,$chaine);
  • $chaine = str_replace( "not_null" ,"NOT NULL" ,$chaine);
  • $chaine = str_replace( "primary_key" ,"PRIMARY KEY" ,$chaine);
  • $chaine = str_replace( "auto_increment" ,"AUTO_INCREMENT" ,$chaine);
  • $chaine = str_replace( "unsigned" ,"UNSIGNED" ,$chaine);
  • $chaine = str_replace( "real" ,"FLOAT" ,$chaine);
  • $chaine = str_replace( "timestamp" ,"TIMESTAMP" ,$chaine);
  • $chaine = str_replace( "blob" ,"BLOB" ,$chaine);
  • $chaine = str_replace( "binary" ,"BINARY" ,$chaine);
  • $chaine = str_replace( "enum" ,"" ,$chaine);
  • $chaine = str_replace( "multiple_key" ,"" ,$chaine);
  • $chaine = str_replace( "unique_key" ,"" ,$chaine);
  • $chaine = str_replace( "zerofill" ,"" ,$chaine);
  • return "{$chaine}";
  • }
  • ?>
Version MySQL :

<?php 

$data = SQL_MLDServer("127.0.0.1","root","");
echo $data;

function SQL_MLDServer($serveur,$user,$password){

    $return="";
    $id_sql = mysql_connect($serveur,$user,$password);							//CONNECTION AU SERVEUR MYSQL
    $db_list = mysql_list_dbs($id_sql);									//LISTER LES BASES DE DONNEES
    $count = mysql_num_rows($db_list);									//NOMBRE DE BASE DE DONNEES
    for($i=0;$i<$count;$i++){
        $database = mysql_db_name($db_list, $i);
        $return.="<br><br><font face=tahoma size=3><u><b>{$database}</b></u></font><br>";
        mysql_select_db($database,$id_sql);								//CONNECTION A LA BASE DE DONNEES SQL
        $pointeur = mysql_query("SHOW TABLES FROM $database;",$id_sql);					//LISTER LES TABLES
        $nbline = mysql_affected_rows($id_sql);								//NOMBRES DE TABLES
        for($j=0;$j<$nbline;$j++){
	    $return.="<br><font face=tahoma size=2><b>" . mysql_result($pointeur,$j,0) . "</b></font>";
	    $list_fields = @mysql_list_fields($database, mysql_result($pointeur,$j,0), $id_sql);	//LISTER LES CHAMPS
	    $nbcolumntab = @mysql_num_fields($list_fields);						//NOMBRE DE CHAMPS
	    if($nbcolumntab>0){										//SI ON TROUVE AU MOINS UN CHAMPS
                $return.="<font face=tahoma size=1>(<br></font>";
	        for($k=0;$k<$nbcolumntab;$k++){
		    $return.= "<font face=tahoma size=1>" . mysql_field_name($list_fields, $k) . " 
						        " . SQLLexic(mysql_field_type($list_fields, $k)) . "
						       (" . mysql_field_len($list_fields, $k) . ")  
						        " . SQLLexic(mysql_field_flags($list_fields, $k)) . "</font>";
	            if($k<$nbcolumntab-1){ $return.="<font face=tahoma size=1>,<br></font>";}
	        }
	        $return.="<font face=tahoma size=1>);<br></font>";
	    } else {
		$return.="<font face=tahoma size=1 color=red>[No fields]</font>";
	    }
        }
    }
    return $return;
}

function SQLLexic($chaine){
    $chaine = str_replace(	"string"		,"VARCHAR"		,$chaine);
    $chaine = str_replace(	"int"			,"INTEGER"		,$chaine);
    $chaine = str_replace(	"not_null"		,"NOT NULL"		,$chaine);
    $chaine = str_replace(	"primary_key"		,"PRIMARY KEY"		,$chaine);
    $chaine = str_replace(	"auto_increment"	,"AUTO_INCREMENT"	,$chaine);
    $chaine = str_replace(	"unsigned"		,"UNSIGNED"		,$chaine);
    $chaine = str_replace(	"real"			,"FLOAT"		,$chaine);
    $chaine = str_replace(	"timestamp"		,"TIMESTAMP"		,$chaine);
    $chaine = str_replace(	"blob"			,"BLOB"			,$chaine);
    $chaine = str_replace(	"binary"		,"BINARY"		,$chaine);
    $chaine = str_replace(	"enum"			,""			,$chaine);
    $chaine = str_replace(	"multiple_key"		,""			,$chaine);
    $chaine = str_replace(	"unique_key"		,""			,$chaine);
    $chaine = str_replace(	"zerofill"		,""			,$chaine);
    return "{$chaine}";
}

?>

Conclusion

Chacun des algorithme est placé dans un fichier individuel.

Le MLD sur MySQL ne se fait que via des commandes SQL propres a la base MySQL.

Le MLD sur SQLite se fait en partie par le lecture de tables cachées contenant les informations de la base.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de TheWeasel47 le 15/04/2008 15:55:46 8/10

Pas mal non plus et surtout très utile!!!!!
A quand la version Oracle?

signaler à un administrateur
Commentaire de Hakumbaya le 15/04/2008 18:12:28

Les versions Oracles et Posgres sont a programmer.
J'en prend bonne note et je me renseigne ;p

signaler à un administrateur
Commentaire de malalam le 15/04/2008 22:10:45 administrateur CS 7/10

Hello,

là par contre le code me plait moins...mais l'idée reste très bonne. Personnellement, j'ai foutu ça dans ma classe d'abstraction DB. C'est toujours très utile ce genre de scripts...
Mais là je te reproche le HTML dans la fonction, (pas beau en plus, ton html), alors qu'elle ne devrait renvoyer que de la donnée, là. Parce que le but c'est d'exploiter son retour ensuite pour, par exemple, vérifier des données qu'on s'apprête à lui envoyer, etc...
Si c'est juste pour de l'affichage, je vais plutôt aller sur mon phpmyadmin ou en l'occurrence pour moi sur mon enterprise manager.
De plus tes @ sans réelle vérification derrière me gênent.
Donc cette fois tu n'auras pas 10...mais pas non plus une mauvaise note parce que le code reste correct et que l'idée est bonne...et que ce code change des codes habituels :-)

signaler à un administrateur
Commentaire de Delphiprog le 19/04/2008 08:44:09 administrateur CS

Et les vues ? et les procédures stockées ? et les triggers ?
Une base de données digne de ce nom comme MySql et, dans une moindre mesure, SqlLite ne se limite pas au simple stockage de données.
Je suis d'accord avec Malalam pour dire que le HTML n'est absolument pas utile ici. Il n'y a pas besoin de faire "joli" mais uniquement de l'utile.

L'idée est bonne et mérite d'être encouragée.

Allez, encore un petit effort et tire la quintessence du schéma INFORMATION_SCHEMA de MySql.

signaler à un administrateur
Commentaire de Delphiprog le 19/04/2008 08:46:34 administrateur CS

Ah oui, aussi : le terme MLD est un peu galvaudé ici puisque les scripts ne font que de décrire le modèle physique des tables.
Appelons un chat un chat...

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

"analyse" de site [ par Evangun ] Bonjour &#224; tous,ce n'est pas du php mais je me demandais s'il y avait un logiciel qui par exemple pouvait parcourir un site (en local chez moi ce analyse lexicale, comment faire? [ par selim68 ] Bonjour,J'aimerai définir des criticités à des produits de ma base de données, ceux-ci seront définit par l'utilisateur, exemple de saisie possible:   formulaire analyse texte [ par lacomm ] HelloJe dois construire un site qui fonctionne comme ceci1) utilisateur doit être reconnu2) utilisateur répond à quelques questions       Aimez-vous analyse d'un fichier text en php [ par fattouch_squall ] Svp je voulé savoir sil ya pa une possibilité afin extraire des donnée particuliere dun contenu dun fichier text en php, car je veu en créer une inter Numéroter un classement [ par pronostic ] Bonjour à tous. Malgré mes recherches et mes tentatives, je n'arrive pas à mes fins. Je souhaiterais afficher un classement du meilleur pronostiqueur Analyse du matériel [ par krz_yama ] Bonsoir,Voila dans le cadre d'un jeu php je cherche une solution afin d'éviter les "multicomptes", le filtrage d'ip n'étant évidement pas efficace, ca Analyse d'une url [ par ddolku ] Bonjour ,Je désire ajouter en php une analyse d'url sur ma base de donnée.j'ai des url a analysé qui sont soit , 200 OK ou en 302 Found .je souhaite f Outil Web d'analyse de texte [ par tecap ] Bonjour, Je recherche un outil d'analyse de texte intégrable à un site Web (PHP, HTML), ou alors un Web service que je pourrais utiliser pour analyser Créer un système d'analyse de simples codes sources PHP [ par david11001 ] Salut !Je désirerai donner la possibilité à mes membres de faire éxécuter par mon site un petit script php.Celui-ci ne doit se composer que de variabl Analyse contenu Site Web [ par kaspersky ] Bonjour à tous, Je viens vous faire part d'un projet que je souhaite réaliser, et je souhaiterai avoir vos réactions,remarques et pour ce qui ont e


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 2,044 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.