Avatar billede supermand69 Nybegynder
17. oktober 2006 - 17:45 Der er 6 kommentarer og
1 løsning

gemme database struktur og indhold som fil

hvordan er det muligt at gemme alle tables i en database med struktur og alt indhold, ligesom i phpmyadmin? her skal filen bare gemmes et sted på serveren
Avatar billede jakobdo Ekspert
17. oktober 2006 - 18:27 #1
Du kan muligvis søge noget inspiration her: http://www.phpfreaks.com/tutorials/114/0.php
Avatar billede supermand69 Nybegynder
17. oktober 2006 - 19:46 #2
det er en tom side
Avatar billede radion Nybegynder
17. oktober 2006 - 20:00 #3
jeg bruger følgende script..

du skal ændre i linie 76 & 77 hvor dine egne database informatinoner skal ind, og i linie 100 hvor du angiver hvad filen der gemmes skal hedde.
Avatar billede radion Nybegynder
17. oktober 2006 - 20:00 #4
<?
$backup_structure=TRUE;
$backup_data=TRUE;
$empty_table=FALSE;
$drop_table=TRUE;

function write2file($filename,$content){
     
        $handle=fopen($filename, 'w');
                       
        // Write $somecontent to our opened file.
        fwrite($handle, $content);
           
           
        //echo "Ba";
       
        fclose($handle);
        //echo "$filename has been created";

}

function backupstructure($tablename){
        $ress = mysql_query("describe `".$tablename."`");
   
   
    $a.="CREATE TABLE `".$tablename."` (\n";
    while ($rows = mysql_fetch_row($ress))
    {
        //foreach ($rows as $rowval)
        if ($rows)
        {
           
    //            echo $rowval .' | ';
                if(strlen($rows[4])==0){
                            $row4="";
                    }else{
                       
                        $row4="default '$rows[4]'";
                        }
                       
                if($rows[3]=="PRI"){
                                         
                    $primarykey="PRIMARY KEY  (`$rows[0]`)";
                }
                $a .="`$rows[0]` $rows[1] $rows[5] $row4,\n";
           
         
    }
       
   
    }
    $a.=$primarykey."\n);";
    return $a;
}


function backup($table){
    global $con;               
    $a ="";
    $sql= ("select * from $table");
    $result = mysql_query($sql) or die("SQL ERROR:<hr>".$sql);
    while($rs = mysql_fetch_object($result)) {               
        $b = ("insert into `$table` values (");
        foreach($rs as $tmp1 => $key){
            $key=str_replace("\n","<br>",$key);
            $key=str_replace("\r","<br>",$key);
            $b.= "'".addslashes($key)."',";
        }
        $a.= substr($b,0,strlen($b)-1).");\n";
    }
    mysql_free_result($result);
    $a."\n";   
    return $a;           
}

$con = @mysql_connect('localhost', 'root', 'pass') or die("<center><b>Connection Error</b></center>");
$current_database = 'min_db';


$trs = mysql_list_tables($current_database,$con);
            $tables=array();
            for($i=0; $i < mysql_num_rows($trs); $i++) {
                $output.="\n\n-- backup af ".mysql_tablename($trs,$i)."\n\n";
                if($empty_table==TRUE){
                    $output.="TRUNCATE TABLE `".mysql_tablename($trs,$i)."`;\n";
                }
                if($drop_table==TRUE){
                    $output.="DROP TABLE IF EXISTS `".mysql_tablename($trs,$i)."`;\n";
                }
                if($backup_structure==TRUE){
                    $output.=backupstructure(mysql_tablename($trs,$i))."\n\n";
                }
                if($backup_data==TRUE){
                    $output.= backup(mysql_tablename($trs,$i));
                }
            }
           
//echo $output;

$filename="db_backup.sql";

write2file($filename,$output);


?>
Avatar billede supermand69 Nybegynder
18. oktober 2006 - 16:06 #5
for noget andet

i phpmyadmin bliver dette også tilføjet i hver create table

) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_danish_ci;

'default charset' går vel ind under 'collate'? så den er vel unødvendig?
Avatar billede radion Nybegynder
18. oktober 2006 - 19:22 #6
supermand69: Ingen ide.. jeg har brugt ovenstående script i noget nær et år, og det har fungeret glimrende :)

jeg sletter i øvrigt altid de oplysninger du skriver, da det som regel sættes default i databasen.
Avatar billede supermand69 Nybegynder
18. oktober 2006 - 19:49 #7
radion > mange tak for hjælpen, men der er bare et problem med dit script og det er at nøgler ikke bliver gemt, kun primary

har hentet inspiration hos dig :)

<?
mysql_connect('localhost', 'xxx', 'xxx');
$DB = 'db';

$boundary = "\n-- ----------------------------------------------------------\n\n";

$str = "-- MySQL Dump\n-- Database: $DB\n-- Genereringstid: ".date("d/m-y H:i", time())."\n$boundary";

$get_table = mysql_query("SHOW TABLE STATUS FROM $DB");
while($table_arr = mysql_fetch_assoc($get_table))
{
    $tmp_arr = array();
    $field_arr = array();
   
    $get_column = mysql_query("SHOW COLUMNS FROM $DB.".$table_arr['Name']);
    while($column_arr = mysql_fetch_assoc($get_column))
    {
        if($column_arr['Null']) $column_arr['Default'] = "default NULL";
        else $column_arr['Default'] = "NOT NULL default '".$column_arr['Default']."'";
       
        $tmp_arr[] = "  ".$column_arr['Field']." ".$column_arr['Type']." ".$column_arr['Default']." ".$column_arr['Extra'];
       
        $field_arr[] = $column_arr['Field'];
    }
   
    $key_arr = array();
   
    $get_index = mysql_query("SHOW INDEX FROM ".$table_arr['Name']." FROM $DB");
    while($index_arr = mysql_fetch_assoc($get_index))
    {
        if($index_arr['Key_name'] == 'PRIMARY') $key_arr['PRIMARY KEY'][''][$index_arr['Seq_in_index']] = $index_arr['Column_name'];
        elseif($index_arr['Non_unique']) $key_arr['KEY'][$index_arr['Key_name']][$index_arr['Seq_in_index']] = $index_arr['Column_name'];
        else $key_arr['UNIQUE KEY'][$index_arr['Key_name']][$index_arr['Seq_in_index']] = $index_arr['Column_name'];
    }
   
    if($key_arr)
    {
        foreach($key_arr as $key_type => $v)
        {
            foreach($key_arr[$key_type] as $key_name => $v)
            {
                $key_str = $key_type;
               
                if($key_name) $key_str .= " $key_name";
               
                ksort($key_arr[$key_type][$key_name]);
                $column_name_arr = array_values($key_arr[$key_type][$key_name]);
               
                $tmp_arr[] = "    $key_str (".implode(',', $column_name_arr).")";
            }
        }
    }
   
    $str .= "CREATE TABLE ".$table_arr['Name']." (\n".implode(",\n", $tmp_arr)."\n) ENGINE=".$table_arr['Engine']." COLLATE=".$table_arr['Collation'].";\n";
   
    $get_row = mysql_query("SELECT * FROM $DB.".$table_arr['Name']);
    if(mysql_num_rows($get_row))
    {
        $data_arr = array();
       
        $str .= "\nINSERT ".$table_arr['Name']." (".implode(',', $field_arr).") VALUES\n";
       
        while($row_arr = mysql_fetch_row($get_row))
        {
            $tmp_arr = array();
           
            foreach($row_arr as $value)
            {
                if(is_numeric($value)) $tmp_arr[] = $value;
                else $tmp_arr[] = "'$value'";
            }
           
            $data_arr[] = "(".implode(',', $tmp_arr).")";
        }
       
        $str .= implode(",\n", $data_arr).";\n$boundary";
    }
}

echo '<textarea style="width:100%; height:100%">'.$str.'</textarea>';
?>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester