2016-07-20 19 views
0

Ich habe Sicherung erfolgreich, aber jetzt muss ich diese Daten in localhost wiederherstellen j mein Backup-Laufwerk ist C: \ Wamp \ www \ mein Pawning-Projekt \ backup_restore das ist mein Wiederherstellungscode.Wie Backup-Mysql-Datei in PHP wiederherstellen

<?php 
include '../Connection/connect.php'; 
$restore_data = $_GET['restore_data'];//file time 
$base="http://localhost/my%20Pawning%20Project/backup_restore/"; 
$query = "select * from backups where time='$restore_data'"; 
    $result = mysql_query($query); 
    while ($row = mysql_fetch_array($result)) { 
     $file_path =$row['file_name']; 
    } 

$sql=file_get_contents($base.$file_path); 
mysql_query($sql); 

if(mysql_query($sql)) 
    { 
    /*Success*/ 
    echo "Successfully restored"; 
    } 
else 
    { 
    /*Fail*/ 
    echo "Error: Fail to Restore"; 
    } 
?> 
+1

Randnotiz: Sie sollten nicht mysql_ * Funktionen verwenden. Mehr Infos hier: http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php –

Antwort

0

Sie führen die Wiederherstellung Abfrage zweimal

mysql_query($sql); 

if(mysql_query($sql)) 

die 1. entfernen und nur das tun:

if(mysql_query($sql)) 

Wenn die Sicherungsdatei viele Abfragen enthält, das wird nicht funktionieren. Sie werden eine der folgenden tun müssen:

  1. Execute mysql direkt und ihn die Sicherungsdatei (siehe Pierre Antwort)
  2. Schalter mysql_-MySQLi Funktionen und verwenden mysqli::multi_query (docs)
  3. Trnsform der Inhalt der Datei in ein Array von Abfragen mit explode(';',$sql) dann zu einem Zeitpunkt, die Abfragen auf ausführen, indem Sie durch die aray Looping (wird langsam sein)
1

Sieverwenden können(oder shell_exec) Funktion in php:

exec("mysql -hHost -uUsername -pPassword database < ~/backupdir/backupFile.sql") 
0

Sie mehrere Anweisungen mit php mysql_* Abfragen nicht ausführen können. Daher sollten Sie zunächst vollständig qualifizierten Pfad der Datei, die Sie verwenden möchten, erhalten und eine SQL-Anweisung ausführen:

$path = $base . $file_path; 
$query = "SOURCE $path" 

mysql_query($query); 
+0

Haben Sie das versucht? 'SOURCE' ist ein eingebauter MySQL-Client. Sie können es nicht als Abfrage ausführen. –

+0

Ist das so? Wenn es so ist, lösche ich die Antwort. –

0

Wenn Sie Mysqli verwenden waren (über mysql_ * empfohlen) Sie folgende

$sql = file_get_contents($file_location); 
if($conn->multi_query($sql)){ 
    while($conn->more_results() and $conn->next_result()){ 
     ; 
    } 
}; 
verwenden könnte
+0

Haben Sie das versucht? Wie behandelt es MySQL-Client-Build-Befehle wie DELIMITER? –

+0

Ich benutze dies für ein Installationsskript, das ich für einen Client eingerichtet habe, also funktioniert es so weit wie das Wiederherstellen einer mysqldump-Sicherung für die Projekte, die ich brauchte, aber ich konnte den einen oder anderen Befehl über den DELIMITER-Befehl nicht bestätigen etwas, auf das man achten sollte –

+0

Wenn Sie Trigger oder gespeicherte Prozeduren in Ihrem mysqldump haben, muss sich das Delimiter ändern, da im Rumpf dieser Routinen Semikolons vorkommen. Aber 'multi_query()' unterstützt keine MySQL-Client-Befehle wie 'DELIMITER', daher schlägt diese Methode fehl. –

Verwandte Themen