firstlord18
Erfahrenes Mitglied
Hallo,
habe folgendes Script, welches mir ein Backup von bestimmten Tabellen erstellen soll:
Naja, soweit klappt es eigentlich ganz gut, nur dass die Primary Keys falsch ausgelesen werden:
Backup erstellt von dem Script:
Und hier das Backup, das von PHPMyAdmin erstellt wurde:
Irgendwie stimmt der erste Primary Key noch, aber danach werden keine mehr angelegt.
Woran liegt das bzw habt Ihr ein (kleines !) Script, welches bestimmte Tabellen backuppd (Also Struktur + Daten der Tabelle)!
Danke!
habe folgendes Script, welches mir ein Backup von bestimmten Tabellen erstellen soll:
PHP:
<?php
$tbl_array = array();
// .. hier dann diesese array mit verschiedenen tabellen füllen ...
for ($y = 0, $c = count($tbl_array); $y < $c; $y++) {
$tabelle = $tbl_array[$y];
// Struktur der Tabelle einlesen
$def = "";
$def .= "DROP TABLE IF EXISTS ".$tabelle."; \n";
$def .= "CREATE TABLE ".$tabelle." (\n";
$result3 = $this->_query("SHOW FIELDS FROM ".$tabelle);
while($row = mysql_fetch_array($result3)) {
$def .= " ".$row['Field']." ".$row["Type"];
if ($row["Default"] != "")
$def .= " DEFAULT '".$row["Default"]."'";
if ($row["Null"] != "YES")
$def .= " NOT NULL";
if ($row["Extra"] != "")
$def .= " ".$row["Extra"];
$def .= ",\n";
}
$def = ereg_replace(",\n$","", $def);
$result3 = $this->_query("SHOW KEYS FROM ".$tabelle);
while($row = mysql_fetch_array($result3)) {
$kname = $row["Key_name"];
if(($kname != "PRIMARY") && ($row["Non_unique"] == 0))
$kname="UNIQUE|".$kname;
if(!isset($index[$kname]))
$index[$kname] = array();
$index[$kname][] = $row["Column_name"];
}
while(list($xy, $columns) = @each($index)) {
$def .= ",\n";
if(trim($xy) == "PRIMARY")
$def .= " PRIMARY KEY (" . implode($columns, ", ") . ")";
elseif (substr($xy, 0, 6) == "UNIQUE")
$def .= " UNIQUE ". substr($xy,7) ." (" . implode($columns, ", ") . ")";
else
$def .= " KEY ".$xy." (" . implode($columns, ", ") . ")";
}
$def .= "\n); \n";
// Ende Struktur Modul
$db = @mysql_select_db($this->conn->db);
$tabelle = "". $tabelle;
$ergebnis=array();
$tbl_name = "\n\n\n--\n-- Tabellenstruktur: `".$tabelle."`\n--\n";
$tbl = "\n\n\n--\n-- Daten für Tabelle `".$tabelle."`\n--\n";
$fp = fopen($file,"a+");
fwrite($fp, $tbl_name.$def);
fwrite($fp, $tbl);
fclose($fp);
$data = "";
if ($tabelle > ""){
$ergebnis[] = @mysql_select_db($database,$conn_id);
$result = $this->_query("select * from ".$tabelle);
$anzahl= mysql_num_rows ($result);
$spaltenzahl = mysql_num_fields($result);
for ($i=0; $i < $anzahl; $i++) {
$zeile=mysql_fetch_array($result);
$data.="insert into ".$tabelle." (";
for ($spalte = 0; $spalte < $spaltenzahl;$spalte++) {
$feldname = mysql_field_name($result, $spalte);
if($spalte == ($spaltenzahl - 1)) {
$data.= $feldname;
}
else {
$data.= $feldname.",";
}
}
$data.=") VALUES (";
for ($k=0; $k < $spaltenzahl; $k++){
if($k == ($spaltenzahl - 1)) {
$data.="'".addslashes($zeile[$k])."'";
}
else {
$data.="'".addslashes($zeile[$k])."',";
}
}
$data.= ");\n";
}
$data.= "\n";
}
else {
$ergebnis[]= $err;
}
$fp = fopen($file,"a+");
$zeit = time();
$speed = $zeit;
for ($i3 = 0; $i3 < count($ergebnis); $i3++){
fwrite($fp, $data);
}
fclose($fp);
}
?>
Naja, soweit klappt es eigentlich ganz gut, nur dass die Primary Keys falsch ausgelesen werden:
Backup erstellt von dem Script:
Code:
DROP TABLE IF EXISTS um_groups;
CREATE TABLE um_groups (
id int(10) NOT NULL auto_increment,
groupname varchar(120) NOT NULL,
art varchar(20) DEFAULT 'by_user' NOT NULL,
autogetnewright int(2) DEFAULT '-1' NOT NULL,
PRIMARY KEY (id)
);
DROP TABLE IF EXISTS um_groups_rights;
CREATE TABLE um_groups_rights (
groups_id int(10) DEFAULT '0' NOT NULL,
rights_id int(10) DEFAULT '0' NOT NULL
);
DROP TABLE IF EXISTS um_rights;
CREATE TABLE um_rights (
id int(10) NOT NULL auto_increment,
rightname varchar(120) NOT NULL,
php_id varchar(100) NOT NULL
);
DROP TABLE IF EXISTS um_users;
CREATE TABLE um_users (
id int(10) NOT NULL auto_increment,
username varchar(100) NOT NULL,
password varchar(100) NOT NULL,
icq varchar(20) NOT NULL,
mail varchar(50) NOT NULL,
random_id varchar(25),
autogetnewright int(2) DEFAULT '-1' NOT NULL
);
DROP TABLE IF EXISTS um_users_groups;
CREATE TABLE um_users_groups (
users_id int(10) DEFAULT '0' NOT NULL,
groups_id int(10) DEFAULT '0' NOT NULL
);
DROP TABLE IF EXISTS um_users_rights;
CREATE TABLE um_users_rights (
users_id int(10) DEFAULT '0' NOT NULL,
rights_id int(10) DEFAULT '0' NOT NULL
);
Und hier das Backup, das von PHPMyAdmin erstellt wurde:
Code:
CREATE TABLE `asdasd` (
`id` int(10) NOT NULL auto_increment,
`name` varchar(100) collate latin1_general_ci NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;
CREATE TABLE `um_groups` (
`id` int(10) NOT NULL auto_increment,
`groupname` varchar(120) collate latin1_general_ci NOT NULL default '',
`art` varchar(20) collate latin1_general_ci NOT NULL default 'by_user',
`autogetnewright` int(2) NOT NULL default '-1',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2 ;
CREATE TABLE `um_groups_rights` (
`groups_id` int(10) NOT NULL default '0',
`rights_id` int(10) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
CREATE TABLE `um_rights` (
`id` int(10) NOT NULL auto_increment,
`rightname` varchar(120) collate latin1_general_ci NOT NULL default '',
`php_id` varchar(100) collate latin1_general_ci NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=14 ;
CREATE TABLE `um_users` (
`id` int(10) NOT NULL auto_increment,
`username` varchar(100) collate latin1_general_ci NOT NULL default '',
`password` varchar(100) collate latin1_general_ci NOT NULL default '',
`icq` varchar(20) collate latin1_general_ci NOT NULL default '',
`mail` varchar(50) collate latin1_general_ci NOT NULL default '',
`random_id` varchar(25) collate latin1_general_ci default '',
`autogetnewright` int(2) NOT NULL default '-1',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2 ;
CREATE TABLE `um_users_groups` (
`users_id` int(10) NOT NULL default '0',
`groups_id` int(10) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
CREATE TABLE `um_users_rights` (
`users_id` int(10) NOT NULL default '0',
`rights_id` int(10) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
Irgendwie stimmt der erste Primary Key noch, aber danach werden keine mehr angelegt.
Woran liegt das bzw habt Ihr ein (kleines !) Script, welches bestimmte Tabellen backuppd (Also Struktur + Daten der Tabelle)!
Danke!