Einzelnen Beitrag anzeigen
  #1  
Alt 04.08.2003, 11:45:31
Gweilo Gweilo ist offline
Member
 
Registriert seit: Oct 2002
Ort: ch
Beiträge: 822
'KEY' auslesen

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.

Geändert von Gweilo (04.08.2003 um 11:47:53 Uhr)
Mit Zitat antworten