mysql dump einlesen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    PHP-Code:
    $dump file('pfad/zum/dump_file.sql');
    for (
    $i=0$i<count($dump); $i++) {
      
    $sql trim($dump[$i]);
      
    mysql_query($sql);
      } 
    da du den Dump selbst erzeugst, solltest du darauf achten, dass keine Kommentarzeilen oder Leerzeilen vorkommen und dass der CREATE-Befehl in einer Zeile ausgeben wird. phpMyAdmin macht das nämlich nicht.
    ansonsten muss man in der Schleife solche Dinge eben abfangen, also z.B.
    PHP-Code:
    if (substr($sql,0,1) != "#" && substr($sql,0,1) != "/" && $sql != ""mysql_query($sql); 
    aufpassen mußte du auch bei Texteinträgen mit einem Umbruch (\n) drin -> beim Dump erzeugen mußt du die durch einen Backslash \ maskieren, sonst hast du da plötzlich eine neue Zeile im Dump-File.

    Oder wie erzeugst du den Dump-File?

    Hast du schon mal vom Rechner aus über den Prompt versucht, dich über telnet einzuloggen?

    Kommentar


    • #17
      ich gestehe ich weiss nicht mal wie ich das anstellen soll mich über telnet einzuloggen. (Schamesröte)

      Gruß Kicky

      Kommentar


      • #18
        Meinen Dump erstelle ich folgendermassen:

        PHP-Code:

        // Struktur der Tabelle einlesen

            
        unset($def,$index);
            
        $def .= "DROP TABLE IF EXISTS $tabellenname;\r\n";
            
        $def .= "CREATE TABLE $tabellenname (\r\n"
            
        $result3 mysql_db_query($database"SHOW FIELDS FROM $tabellenname");
            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 .= ",\r\n";
            }
            
        $def ereg_replace(",\r\n$"""$def);
            
        $result3 mysql_db_query($database"SHOW KEYS FROM $tabellenname");
            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 .= ",\r\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 .= "\r\n);\r\n\r\n";

        // Ende Struktur Modul
            
        $db mysql_select_db($database);
            
        $tabelle "".$tabelle;
            
        $text "#\r\n# Daten für Tabelle `$tabellenname`\r\n#\r\n\r\n";

            
        $fd fopen($file_name,"a+"); 
            
        fwrite($fd$text.$def); 
            
        fclose($fd);

            unset(
        $data);
            if (
        $tabelle "") {
                
        $ergebnis[] = mysql_select_db($database);
                
        $result mysql_query("SELECT * FROM $tabellenname");
                
        $anzahl mysql_num_rows($result);
                
        $spaltenzahl mysql_num_fields($result);
                for (
        $i 0$i $anzahl$i++) {
                    
        $zeile mysql_fetch_array($result);
                    
        $data .= "INSERT INTO $tabellenname (";
                    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 .= ");\r\n";
                }
                
        $data .= "\r\n";
            } else {
                
        $ergebnis[] = "Keine Tabelle übergeben";
            } 
        Gruß Kicky

        Kommentar


        • #19
          so müßte eigentlich der Dump ohne überflüssige Kommentare und Leerzeilen erzeugt werden. Dann wird auch die recht schlichte Version des Auslesens funktionieren.
          PHP-Code:
          // Struktur der Tabelle einlesen

              
          unset($def,$index);
              
          $def .= "DROP TABLE IF EXISTS $tabellenname;\r\n";
              
          $def .= "CREATE TABLE $tabellenname ("
              
          $result3 mysql_db_query($database"SHOW FIELDS FROM $tabellenname");
              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 .= ", ";
              }
              
          $def substr($def,0,-2); // letztes ", " abschneiden
              
          $result3 mysql_db_query($database"SHOW KEYS FROM $tabellenname");
              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 .= ", ";
                  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 .= ");\r\n";

          // Ende Struktur Modul
              
          $db mysql_select_db($database);
              
          $tabelle "".$tabelle;
              
          //$text = "#\r\n# Daten für Tabelle `$tabellenname`\r\n#\r\n\r\n";

              
          $fd fopen($file_name,"a+"); 
              
          fwrite($fd$def); 
              
          fclose($fd);

              unset(
          $data);
              if (
          $tabelle "") {
                  
          $ergebnis[] = mysql_select_db($database);
                  
          $result mysql_query("SELECT * FROM $tabellenname");
                  
          $anzahl mysql_num_rows($result);
                  
          $spaltenzahl mysql_num_fields($result);
                  for (
          $i 0$i $anzahl$i++) {
                      
          $zeile mysql_fetch_array($result);
                      
          $data .= "INSERT INTO $tabellenname (";
                      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 .= ");\r\n";
                  }
                  
          $data .= "\r\n";
              } else {
                  
          $ergebnis[] = "Keine Tabelle übergeben";
              } 

          Kommentar


          • #20
            Original geschrieben von Kicky
            ich gestehe ich weiss nicht mal wie ich das anstellen soll mich über telnet einzuloggen. (Schamesröte)
            ja, ab in die Ecke und schäm dich.

            wenn du einen Windows-Rechner hast, dann über den Prompt ("Start" > "Ausführen" > eingeben "cmd" > Fenster geht auf) einfach folgender Befehl:

            telnet URL_von_deinem_webspace

            und abwarten. Wenn telnet überhaupt möglich, dann wird nach dem User und dem Passwort gefragt -> User und Passwort müßte dann das von deinem Account sein. Falls nicht, sagt dir das Programm, dass der Connect nicht möglich ist. Dann war's schade.

            P.S.: wirklich NUR die Url, NICHT mit http:// eingeben

            Kommentar


            • #21
              Ganz lieben Dank,

              da werde ich mich erst einmal durchwühlen. Ich werde mich melden wenn es funktioniert - und wenn nicht wohl auch.

              Gruß Kicky

              Kommentar


              • #22
                okay

                klaro, mach das.

                Ich bin vermutlich erst wieder am Montag im Forum unterwegs.
                Bis dann und schönes Wochenende (falls wir uns in den nächsten 1-2 Stunden nichts mehr schreiben )

                Kommentar


                • #23
                  @ BrainBug


                  Hallo,

                  ich hoffe Du hattest ein erholsames Wochenende. Zuerst noch mal lieben Dank für Deine Unterstützung am Freitag. Es ist unglaublich aber wahr, es funktioniert jetzt fast! Fast leider nur deswegen. Ich weiss immer noch nicht wie ich es löse wenn jemand etwas in die DB eingiebt mit breaks. Der User giebt etwas in eine Textarea ein. Wie bekomme ich die (sie sind ja mittendrinnen) nun raus um im dump alles in einer Zeile zu haben. Hast du dafür noch eine Idee für mich? Danke vorab ich werde auch weiter nach einer Lösung für dieses hoffentlich letzte Problem in dieser Angelegenheit suchen. Also so long

                  Kicky

                  Kommentar


                  • #24
                    hmm, ich dachte eigentlich, dass das mit dem addslashes() ausreichen würde. Scheinbar nicht...

                    probier's mal so

                    PHP-Code:
                    $dump file('pfad/zum/dump_file.sql');
                    $sql="";
                    for (
                    $i=0$i<count($dump); $i++) {
                      
                    $sql .= trim($dump[$i]);
                      if (
                    substr($sql,0,6)=="INSERT" && substr($sql,-4)==");\r\n") {  
                        
                    mysql_query($sql);
                        
                    $sql="";
                        }
                      } 
                    die if-Abfrage prüft, ob die Zeile mit dem INSERT-Befehl beginnt und auch mit dem korrekten Abschluss endet. Falls nicht, wird der SQL-Query ausgelassen und der nächste Array-Eintrag an den bestehenden String angehängt, und zwar solange, bis das INSERT-Zeilenende kommt. Bin mir nicht sicher, ob die Abfrage nach den Steuerzeichen so funktioniert. Einfach mal testen...

                    P.S.: Wochenende war mal wieder zukurz für all das, was ich vor hatte. Aber trotzdem erholsam, danke der Nachfrage

                    Kommentar


                    • #25
                      Herzlichen Dank für deine super schnelle Antwort.

                      Die Abfrage nach den Steuerzeichen funktioniert so leider nicht. Ich bin am überlegen ob es auch an meiner Eingabe in die DB liegen kann. Ob ich da nicht schon etwas abfangen kann. Der User muss zwar die möglichkeit haben Zeilenumbrüche zu machen, aber ich bin gerade am schauen ob ich das anders einbauen muss damit es korrekt ist und auch wieder ausgelesen werden kann. Die Anzeige im Browser ist ok, aber eben nicht beim einlesen des dumps. Wenn ich einen Eintrag ohne Zeilenumbrüche habe wird er einwandfrei eingelesen.


                      Gruß Kicky

                      Kommentar


                      • #26
                        Ich habe es noch einmal geprüft und das Problem scheint nur aufzutreten, wenn bei der Eingabe in dei DB die returntaste genutzt wird. Dann liest er mir den dum nicht mehr wieder ein. Ich vermute also das das einspielen des Dumpes ok ist und ich bei der Eingabe in die db bzw. beim erstellen des dumpes diese Situation berücksichtigen muss.

                        Kannst du mir kurz bestätigen ob ich mit diesem Gedankengang richtieg liege? Meine Güte wie lernen andere Leute so etwas?? Oder ich stelle mich besonders dusselig an.

                        Danke für alles

                        Gruß Kicky

                        Kommentar


                        • #27
                          Unglaublich aber wahr!!!!!!!
                          Es funktioniert!!!!!!!

                          Ich wollte mich nur noch einmal von Herzen bedanken und hoffe ich bekommme jetzt keine Rechnung für privatstunden. Ich bin noch einmal unseren gesamten Thread von Freitag durchgegangen und habe gegrübelt. Dann fiel es mir wie Schuppen von den Augen und ich habe es mit

                          PHP-Code:
                          addcslashes() 
                          versucht. Siehe da, das hat funktioniert.
                          In meinem Eifer am Freitag hatte ich völlig vergessen Dir zu sagen das der Telnet-zugang nicht möglich war. Also noch einmal super herzlichen Dank

                          Gruß Kicky

                          Kommentar


                          • #28
                            gern geschehen.

                            und Abrechnungen über Privatstunden gibt es hier nicht. Das ist alles in der Pauschale drin, die du mir bitte sofort und ohne Abzug auf mein Konto überweist

                            Ciao
                            BrainBug

                            Kommentar

                            Lädt...
                            X