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.
Und hier meine Datei wo alles passiert und der Dump gespeichert werden soll
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
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;
}
}
?>
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_host, db_user, db_pw, db_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, $db, db_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;
}
?>
Könnt ihr mir vieleicht weiter helfen was ich da falsch mache? Vielen Dank für eure Bemühungen.
Mfg litter
Kommentar