Mld d'un base de données mysql ou sqlite

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 / Exemple :


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.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.