Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 21-07-2010, 16:47
litterauspirna
 Registrierter Benutzer
Links : Onlinestatus : litterauspirna ist offline
Registriert seit: Nov 2007
Beiträge: 333
litterauspirna ist zur Zeit noch ein unbeschriebenes Blatt
Standard 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
Mit Zitat antworten