Version: 1.0
Type: Function
Category: Databases
License: GNU General Public License
Description: a mysqldump parser..returns table structure of a dump in a nice associative array.
<?
/******************************************************************************************************************
*Date: December 13, 2005
*Author: Dan Cochran
*
*Description: This will parse a mysql schema. All table definitions found will be returned .
* What you get... Primary KEY(s), table_name, field type, field name and default value.
*
*email me with question or comments/bugs @ dan@deecodameeko.com
*see it in action: http://deecodameeko.com/code/dbClassBuilder/
*Disclaimer:
*Copyright (C) 2005 Dan Cochran
*
*This program is free software; you can redistribute it and/or
*modify it under the terms of the GNU General Public License
*as published by the Free Software Foundation; either version 2
*of the License, or (at your option) any later version.
*
*This program is distributed in the hope that it will be useful,
*but WITHOUT ANY WARRANTY; without even the implied warranty of
*MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
*GNU General Public License for more details.
*
*You should have received a copy of the GNU General Public License
*along with this program; if not, write to the Free Software
*Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
******************************************************************************************************************/
function parse($filename){
$content = '';
$tables = array();
if($fp= fopen($filename,"r")){
While(!feof($fp)){
$content = fgets($fp, 80);
$content = trim($content);
if(!ereg("#", $content) && !empty($content)){
if(!ereg("TYPE=", $content)){
//the line with the "{" is first line of create statement
if(ereg("CREATE TABLE", $content)){
//strip out the table name
$content = ereg_replace("CREATE TABLE", "", $content);
$content = ereg_replace("\(", "", $content);
//echo $content." 1<br>";
$content = trim($content);
if(!empty($content)){
$tables[$count]['name']= $content;
}
}
elseif(ereg("PRIMARY KEY",$content)){
$tmp = trim(ereg_replace('PRIMARY KEY','',$content));
$tmp = ereg_replace('\(','',$tmp);
$tmp = ereg_replace('\)','',$tmp);
$tables[$count]['pk'][] = trim($tmp);
$count++;
}
else{//fields
$field_definition = preg_split ("/[\s,]+/", $content);
$field_name = $field_definition[0];
$type = $field_definition[1];
if(count($field_definition) > 5){
$default = $field_definition[5];
}
else{
$default = $field_definition[3];
}
if($field_name != 'KEY'){
$default = ereg_replace("'","", $default);
$tables[$count]['field_name'][] = $field_name;
$tables[$count]['default'][] = $default;
$tables[$count]['type'][] = $type;
}else{
$tables[$count]['pk'][] = $field_name;
}
}
}
else{
continue;
}
}
}
}
else {
echo "oops";
}
fclose($fp);
return($tables);
}//end function parse
/***************************************
Sample use:
argument: $file
desc: $file is the name of the variable containing the contents of the mysql schema
include("deeMySQLParser.php");
$tables = parse($file);
$content = '';
for($i=0; $i<count($tables); $i++){
$content .= "Table Name: ."$tables[$i]['name']." Field Name: ".$tables[$i]['field_name']."<br><br>";
}
echo $content;
***************************************/
?>