Ich habe ein Backupprogramm für MySQL datenbanken vom Internet heruntergeladen, nur funktionniert das ganze nicht wie es soll, und ich habe keine ahnung weshalb nicht!
// Struktur der Tabelle einlesen
$def = "";
$def .= "DROP TABLE IF EXISTS $tabelle; n";
$def .= "CREATE TABLE $tabelle (n";
$result3 = mysql_db_query($database, "SHOW FIELDS FROM $tabelle",$conn_id);
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 = mysql_db_query($database, "SHOW KEYS FROM $tabelle",$conn_id);
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($xy == "PRIMARY") $def .= " PRIMARY KEY (" . implode($columns, ", ") . ")";
else if (substr($xy,0,6) == "UNIQUE") $def .= " UNIQUE ".substr($xy,7)." (" . implode($columns, ", ") . ")";
else $def .= " KEY $xy (" . implode($columns, ", ") . ")";
}
$def .= "n); n";
// Ende Struktur Modul
Das Problem ist, dass "KEY id (id)" nur beim ersten durchlauf (-> erste tabelle) aufgeführt wird (letzte while schleife wird nur ein mal ausgeführt), später nicht mehr. So Sieht das dann aus:
Code:
DROP TABLE IF EXISTS anwendungen;
CREATE TABLE anwendungen (
id int(11) NOT NULL auto_increment,
titel varchar(80) NOT NULL,
text text NOT NULL,
punkte text NOT NULL,
sort double DEFAULT '0' NOT NULL,
KEY id (id)
);
DROP TABLE IF EXISTS backup;
CREATE TABLE backup (
id int(11) NOT NULL auto_increment,
file varchar(100) NOT NULL,
time varchar(20) NOT NULL
);
Habe mal die wichtigen teile fett markiert.