Problem beim schreiben in eine sql Datei via file_get_contents

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

  • Problem beim schreiben in eine sql Datei via file_get_contents

    Hallo PHPler,

    nach langer Zeit hab ich hier auch mal ne Frage.

    Ich habe mir einen kleinen SQL Dump geschrieben und das einzige Problem was ich noch habe ist, dass wenn ich mir alles per echo ausgeben lasse, dann haut das hin und mir wird alles angezeigt. Aber wenn ich die Daten dann in die Datei schreibe dann wird nur die letzte Tabelle der Datenbank mit dem dazugehörigen Insert in die SQL Datei geschrieben. Das verstehe ich nicht ganz.

    Meine Klasse für das speichern der SQL Datei.
    PHP-Code:
    <?php
    /*
    *
    *    klasse die den sql dump speichert
    *
    */
    class SaveDumpClass{
        
        protected 
    $sqlDumpFile;
        
        
    //konstruktor
        
    public function __construct($sqlDumpFile){
            
            
    $this->sqlDumpFile $sqlDumpFile.'.sql';
        }
        
        
    //sql dump file erstellen
        
    public function saveSqlFile($current){
            
            
    $file file_put_contents($this->sqlDumpFile$current);
            
            return 
    $file;
        }
    }
    ?>
    Und hier meine Datei wo alles passiert und der Dump gespeichert werden soll
    PHP-Code:
    <?php
    error_reporting
    (E_ALL E_STRICT);
    ini_set('display_errors'TRUE);

    require_once(
    'dbConnectVars.php');
    require_once(
    'DbAdaptClass.php');
    require_once(
    'ListTableClass.php');
    require_once(
    'ReadTableClass.php');
    require_once(
    'SaveDumpClass.php');

    //instanz für datenbankverbindung
    $db = new DbAdaptClass();

    //setzen welches DBMS verwendet wird
    $db->setDbms("mysql");

    //connect zur DB
    $db->dbConnect(db_hostdb_userdb_pwdb_name);

    //instanz der klasse zur tabellen listung
    $readTable = new ReadTableClass();

    //klasse zum speichern des sql files aufrufen
    $sqlDump = new SaveDumpClass(db_name);

    //echo $sqlDump->saveSqlFile();

    //query string
    $queryString "SHOW TABLES FROM ".db_name."";

    $readTable->setTableList($queryString$dbdb_name);

    foreach(
    $readTable->getTableList() as $key => $value){
        
        
    $query $db->dbQuery('SHOW CREATE TABLE '.$value.'');
        
    $fetch $db->dbFetchRow($query);
        
        
    $selectQuery $db->dbQuery('Select * From '.$value.'');
        
        
    $numFlieds $db->tableNumFields($selectQuery);
        
        
    $sqlInsert ="---\n";
        
    $sqlInsert .="--- Tabellenstruktur für Tabelle `".$value."`\n";
        
    $sqlInsert .="---\n";
        
        
    $sqlInsert .= $fetch[1].';';
        
        
    /*
        *
        *    abfrage zum prüfen ob eine tabelle datensätze enthält
        *
        */
        
    $countTablerows ="
                        Select
                            *
                        From
                            "
    .$value."
                        "
    ;
        
    $countTablerowsQuery $db->dbQuery($countTablerows);
        
        
    $countRowsForInsert $db->dbNumRows($countTablerowsQuery);
        
        
    /*
        *
        *    wenn datensätze gefunden werden dann ein insert
        *
        */
        
    if($countRowsForInsert 0){
            
            
    $sqlInsert .="\n\n---\n";
            
    $sqlInsert .="--- Daten für Tabelle `".$value."`\n";
            
    $sqlInsert .="---\n";
            
            
    /*
            *
            *    erstellen des inserts auf die tabellen
            *
            */
            
    $sqlInsert .="
                        INSERT INTO `"
    .$value."`\n
                                (
                        "
    ;
                            
                                    for(
    $i 0$i $numFlieds$i++){
                                        
                                        
    $fieldNames $db->readTableNames($selectQuery$i);
                                        
                                        if(
    $i $numFlieds 1){
                                            
                                            
    $sqlInsert .= ' `'.$fieldNames.'`,';
                                        } else {
                                            
                                            
    $sqlInsert .= '`'.$fieldNames.'`';
                                        }
                                    }
                            
            
    $sqlInsert .="
                                )
                        "
    ;
                        
            
    $sqlInsert .="\nVALUES";
            
            
    $selectTableData ="
                                Select
                                    *
                                From
                                    "
    .$value."
                                "
    ;
            
    $selectTableDataQuery $db->dbQuery($selectTableData);
            
            
    $countTable $db->dbNumRows($selectTableDataQuery);
            
            
    $j 0;
            
            while(
    $selectTableDataFetch $db->dbFetchAssoc($selectTableDataQuery)){
                
                
    $j++;
                
                
    $sqlInsert .="\n(";
                
                for(
    $i 0$i $numFlieds$i++){
                                        
                    
    $fieldNames $db->readTableNames($selectTableDataQuery$i);
                    
                    if(
    $i $numFlieds 1){
                        
                        
    $sqlInsert .= "'".$selectTableDataFetch[$fieldNames]."',";
                    } else {
                        
                        
    $sqlInsert .= "'".$selectTableDataFetch[$fieldNames]."'";
                    }
                }
                
                if(
    $j $countTable){
                    
                    
    $sqlInsert .="),";
                } else {
                    
                    
    $sqlInsert .=")";
                }
            }
        }
        
        
    $sqlInsert .= '\n';
        
        
    $sqlDump->saveSqlFile($sqlInsert);
        
        
    //echo $sqlInsert;
    }
    ?>
    Wenn ich nun mal alle \n durch <br> ersetze und dann das ganz unten auskommentierte echo ausgeben lasse, dann wird alles richtig und korrekt ausgebeben. Kommentiere ich das echo aus und führe den Code so aus wie ihr es jetzt seht, dann wird nur die letzte Tabelle in die SQL Datei geschrieben, dass verstehe ich nicht wirklich.

    Könnt ihr mir vieleicht weiter helfen was ich da falsch mache? Vielen Dank für eure Bemühungen.

    Mfg litter
    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
    http://www.lit-web.de

  • #2
    Zitat von litterauspirna Beitrag anzeigen
    PHP-Code:
    foreach($readTable->getTableList() as $key => $value){
        
        
    $query $db->dbQuery('SHOW CREATE TABLE '.$value.'');
        
    $fetch $db->dbFetchRow($query);
        
        
    $selectQuery $db->dbQuery('Select * From '.$value.'');
        
        
    $numFlieds $db->tableNumFields($selectQuery);
        
        
    $sqlInsert ="---\n";
        
    $sqlInsert .="--- Tabellenstruktur für Tabelle `".$value."`\n"
    Mit der vorletzten Zeile weist du in jedem Schleifendurchlauf $sqlInsert wieder einen neuen Wert zu, und alles was bisher drin stand, wird damit überschrieben ...
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      So richtig blicke ich grad nicht was du mir sagen willst. Zumindest habe ich grad Verständnisprobleme. Denn wie ich ja schrieb bei einem echo wird alles ausgegeben aber bei einem Versuch das ganze in die SQL Datei zu schrieben geht das eben schief. Und das will mir nicht in den Kopf.

      Gebe ich alles mit echo aus geht es und wenn ich das in einer Datei speichern will wird das überschrieben? Was muss ich da anders amchen?
      Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
      http://www.lit-web.de

      Kommentar


      • #4
        PHP-Code:
        $sqlInsert ="---\n"
        <-- innerhalb der Foreach ... und das echo auch ...Siehst du das Problem?.
        Bitte Beachten.
        Foren-Regeln
        Danke

        Kommentar


        • #5
          Und wo machst du die Ausgabe per echo ...?

          Falls du das ganz unten vor dem Ende der Schleife meinst - natürlich, das gibt in jedem Durchlauf den aktuellen Wert von $sqlInsert aus. Wenn dieser Variableninhalt im nächsten Durchlauf überschrieben wird, macht das aber natürlich nicht die Ausgabe per echo irgendwie rückgängig.

          Ich sehe gerade, das Schreiben in die Datei machst du ja auch in der Schleife ... und damit überschreibst du die Datei natürlich auch jedes mal.
          Zuletzt geändert von wahsaga; 21.07.2010, 16:21.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Zitat von wahsaga Beitrag anzeigen
            Und wo machst du die Ausgabe per echo ...?
            Dazu kommentiere ich das hier aus.

            PHP-Code:
            $sqlDump->saveSqlFile($sqlInsert); 
            und dafür wird das aktiv.

            PHP-Code:
            echo $sqlInsert
            und wenn ich das mache ist alles da was da sein muss. Nur eben beim schreiben in die Datei geht das schief.
            Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
            http://www.lit-web.de

            Kommentar


            • #7
              Zitat von wahsaga Beitrag anzeigen

              Ich sehe gerade, das Schreiben in die Datei machst du ja auch in der Schleife ... und damit überschreibst du die Datei natürlich auch jedes mal.
              Mache ich das auserhalb der foreach Schleife habe ich genau das gleiche Ergebnis das nur ein Datensatz nämlich die letzte Tabelle der DB in die SQL Datei geschrieben wird.
              Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
              http://www.lit-web.de

              Kommentar


              • #8
                Ok Problem gelöst, ich musst nur vor der foreach Schleife

                PHP-Code:
                $sqlInsert =""
                schreiben und dann in der Schleife sofort mit

                PHP-Code:
                $sqlInsert .="datensätze"
                anfangen. Und nun geht es.

                Danke für eure Zeit und Hilfe.
                Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                http://www.lit-web.de

                Kommentar

                Lädt...
                X