Recover Database from Project

Tips submitted by PHPMaker users
Post Reply
ghasem

Recover Database from Project

Post by ghasem »

hi
i lost my MySQL database and i have not any backup,
before it, i made a phpmaker project by this database.
can i restore or recover tables and fields structure from phpmaker project file?


Webmaster
User
Posts: 9427

Post by Webmaster »

You can only recreate it according to the table/field names and the data type in the project.


ghasembaghi

Post by ghasembaghi »

i write below php script to convert PHPMaker project file to MySQL query to recover table structure

notes:
1- firs rename your project file to "project.pmp.xml" and copy it near php script file.
2- this script only recover Table structure and not work for view.
3- this script only recover FiledName,FieldType & FieldSize. other attribute must be set manually (PRIMARY KEY,AUTO_INCREMENT,NOT NULL,...)
4- delete all table before execute this SQL
5- after run this script, delete last coma before ",) ENGINE=MyISAM..."

<?php
$xml = simplexml_load_file("project.pmp.xml");
$nodes = $xml->xpath('/Project/Database/Table');
foreach ($nodes as $table)
	{
	if ($table['TblName']=='TABLE')
		{
		echo "CREATE TABLE `" . $table['TblName'] . "` (";
		foreach ($table->children() as $field)
			{
			echo "`" .$field['FldName']. "` " .$field['FldTypeName'];
			if (!($field['FldTypeName']=='DATETIME' || $field['FldTypeName']=='DATE' || $field['FldTypeName']=='TIME' || $field['FldTypeName']=='TIMESTAMP' || $field['FldTypeName']=='LONGTEXT' || $field['FldTypeName']=='TEXT' || $field['FldTypeName']=='TINYTEXT')) 
				echo "(" .$field['FldSize']. ")";
			echo ",";
			}
		echo ") ENGINE=MyISAM DEFAULT CHARSET=utf8;";
		}
	}
?>

leonardopiel
User
Posts: 11

Post by leonardopiel »

Hello, I know this is a old question but I had the same problem and fixed using ghasembaghi's code but I'd had to do some changes to work in v2021.
You have to create a folder and create a xml.php file. Than paste your pmp files into this new folder and rename to 'project.pmp.xml' then paste this code into your xml.php file:

<?php
$xml = simplexml_load_file("project.pmp.xml");
$nodes = $xml->xpath('/Project/Database/Table');
foreach ($nodes as $table) {
    if ($table['TblType'] == 'TABLE') {
        echo "CREATE TABLE " . $table['TblName'] . " (";
        $total_tbl = count($table->children());
        $c = 0;
        foreach ($table->children() as $field) {
            echo "" . $field['FldName'] . " " . $field['FldTypeName'];
            if (!($field['FldTypeName'] == 'DATETIME' || $field['FldTypeName'] == 'DATE' || $field['FldTypeName'] == 'TIME' || $field['FldTypeName'] == 'TIMESTAMP' || $field['FldTypeName'] == 'LONGTEXT' || $field['FldTypeName'] == 'TEXT' || $field['FldTypeName'] == 'TINYTEXT')){
                echo "(" . $field['FldSize'] . ")";
            }
            $c++;
            if( $c < $total_tbl){
                echo ",<br/>";   
            }
        }

        echo "<br/>) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
        echo "<br/>";
        echo "<br/>";
    }
}

May this help some one.


Post Reply