2008-11-02 9 views

Antwort

5

Jedes Datenbanksystem wird mit einem Programm zum Dumping des Inhalts geliefert.

Sie einfach das Programm von PHP aufrufen können system() oder shell_exec() verwenden.

Zum Beispiel, wenn Sie PostgreSQL mit aktivierter Ident authentication verwenden und wollen die Datenbank test direkt als SQL-Text an den Browser entleeren, dann ist es so einfach wie:

 
<?php 
header('Content-type: text/plain'); 
system('pg_dump test'); 
?> 

Wenn MySQL mit Datenbank-Benutzer und Passwort gespeichert in ~/.my.cnf, es ist auch sehr einfach:

 
<?php 
header('Content-type: text/plain'); 
system('mysqldump test'); 
?> 

jedoch dies nicht tun:

 
<?php 
header('Content-type: text/plain'); 
system('mysqldump -utestuser -ptestpassword test'); 
?> 
weil ein Passwort als Kommandozeilen-Übertragung Argument ist very insecure.

+0

Bin ich der Meinung, dass Sie dies auch über eine SQL-Abfrage ausführen könnten? Einige Shared Hosting-Anbieter erlauben keine Systemaufrufe. – Ross

+0

Wenn Sie einen Hosting-Provider haben, der system() oder shell_exec() nicht zulässt, sollten Sie zu einem seriösen Provider wechseln. Eine solche Einschränkung fügt nicht wirklich Sicherheit hinzu. Es nervt nur die Kunden. – vog

0

Es ist ein ziemlich komplizierter Prozess. Ich empfehle Ihnen, phpmyadmin oder ähnliches zu verwenden.

0

Während das Sichern einer Datenbank „konform zum ANSI SQL“ möglich und bewundernswert ist, werden Sie noch Portabilität Probleme auftreten. Das offensichtlichste ist, dass das Dump/Restore-Format von MySQL zwar ziemlich schnell ist, dies jedoch hauptsächlich durch die Verwendung einer nicht standardmäßigen Erweiterung von SQL erreicht wird. Sie können den Dump nicht einfach an PostGresql übergeben: Es wird nicht funktionieren. In der Tat ist PostGresql auch ziemlich langsam im Umgang mit einer großen Menge von INSERT-Anweisungen. Das native Dump-Format verwendet eine eigene SQL-Anweisung, die für das gleichzeitige Einfügen einer großen Datenmenge optimiert ist.