PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   'KEY' auslesen (http://www.selfphp.de/forum/showthread.php?t=5134)

Gweilo 04.08.2003 11:45:31

'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.

Gweilo 05.08.2003 10:14:23

hier ist noch der komplette code. Vielleicht findet jemand damit den fehler:

http://3d-community.com/cavitec/dump.phps

Ben20 05.08.2003 10:51:39

Ich hab mir das Tool nicht angesehen, aber warum machst Du das Ganze nicht mit phpMyAdmin oder (wenn Du Shellzugriff hast) mit mysqldump?

chris17 05.08.2003 11:11:31

Hallo Gweilo,

das funktioniert, wenn's das System hergibt, auch prima...
http://www.selfphp.info/forum/showth...9754#post29754

Gweilo 05.08.2003 12:51:13

phpmyadmin geht nicht, weil ich die backups automatisch erstellen lasse (1 mal am tag) und diese dann auch automatisch wieder einlesen können will.

Es funktionniert alles, bis auf diese "KEY id (id)" die ab der 2. tabelle fehlen.

ich glaube es läuft auf einem UNIX system, dann klappt das mit linux nicht mehr, oder geht dieser shell befehl auch unter UNIX?

Danke schon mal für die antworten...

Ben20 05.08.2003 13:01:49

Der Shellbefehl klappt auf jeden Fall unter Unix/Linux/*ix - daher kenn ich das Teil sogar, weiß nicht ob es bei Windows auch geht.

Gweilo 05.08.2003 14:19:23

woran das problem liegt weiss niemand?


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:54:14 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.