SQL Dump mit PHP Importieren

Distrubtor

Grünschnabel
Hi,

Ich habe folgendes Problem:

Ich schreibe gerade ein Script mit dem es möglich sein soll die Datenbank zu Sichern und später bei bedarf wieder herzustellen. Der Dump wird dabei in eine Datei geschrieben d.h also um ihn wiederherzustellen muss ich diese Datei öffnen... Nun habe ich aber das Problem das Wenn ich es Zeile für Zeile Versuche ein MySQL error kommt was ja auch logisch ist da die MySQL Befehle sich über mehrer Zeilen erstrecken, aber wenn ich z.B Versuche die Zeilenumbrüche zu entfernen funktioniert es auch nicht!

Mein Code sieht zur Zeit so aus:

PHP:
if($_GET[action]=="restoredb"&&isset($_GET[filename])){

$result=mysql_list_tables($sqldb);

    while($row=mysql_fetch_row($result)){
        mysql_query("DROP Table $row[0]") or die(mysql_error());
    }

$sql = file_get_contents ("./backup/$_GET[filename]");

$sql = preg_replace ("%/\*(.*)\*/%Us", '', $sql);
$sql = preg_replace ("%^--(.*)\n%mU", '', $sql);

$sql = preg_replace ("%^$\n%mU", '', $sql);

if (version_compare (phpversion(), "4.3.0", ">=") == 1){
    mysql_real_escape_string($sql); // ab php 4.3.0
}
else{
    mysql_escape_string($sql);
}

$sql = explode (";", $sql);

foreach ($sql as $q){
    if ($q != '' && $q != ' '){
        mysqli_multi_query($q) or die (mysql_error());
        echo nl2br($q)."\n<hr />\n";
    }
}
echo "<h2>query wurde erfolgreich ausgeführt!</h2>";
	}

Der Vollständige MySQL Dump ist im Ahnang. Kann mir jemand weiterhelfen?
 

Anhänge

Mh, geht das denn nicht ganz simpelt?

PHP:
$backup = file_get_contents ("./backup/$_GET[filename]"); 
 
$result = mysql_query("$backup");
 
echo $result;
 
Leider nein

Dann kommt folgender Fehler:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; CREATE TABLE bb1_access ( boardid int(11) unsigned DEFAULT '0' NOT NULL,' at line 15
 
Die Fehlermeldung lässt vermuten, dass sich MySQL an dem Semikolon vor dem CREATE Befehl stört. Du solltest die Anweisungen einzeln an die Datenbank übergeben. Außerdem enthalten SQL-Befehle die über mysql_query() übergeben werden kein abschließendes Semikolon.

Gruß Marian
 
Zurück