phpbar.de logo

Mailinglisten-Archive

[php] SQL Import

[php] SQL Import

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Son Nov 6 15:00:53 CET 2005


Hi,

Design schrieb:
>> Design schrieb:
>>> Gibt es unter PHP  eine einfache lösung einen SQL Dump einzulesen
>>> inkl. Tabellendefinition,Daten u.s.w.?

> Also :
> 1. mySQL
> 2. DBDUMP mit phpmyAdmin
> 3. Ich möchte diesen Dump möglichst systemübergreifend einspielen. Es
> handelt sich dabei um ein Config Tool. Dieses soll möglichst auf jedem
> Server laufen. Auch mit geringen Rechten

ok.

Also eine Möglichkeit wäre natürlich, den Dump dann mit einer
phpMyAdmin-Installation wieder einzuspielen. Da hier allerdings die
Dump-Datei dann vorzugsweise über phpMyAdmin hochgeladen werden müßte,
würde das bei sehr großen Dumps Probleme geben, deren Größe den Wert von
upload_max_filesize überschreiten.

Bliebe also die Möglichkeit, die Dump-Datei z.B. per FTP hochzuladen und
dann mit einem PHP-Skript auszulesen und die ausgelesenen SQL-Befehle dann
über PHP auszuführen.

Da auch hier die Dateigröße zu bedenken ist - große Dump-Dateien kannst Du
nicht einfach auf einen Schlag in eine Variable packen -, solltest Du die
Dump-Datei also öffnen und Zeilenweise durchgehen. Zeilen mit "#" am
Anfang und leere Zeilen läßt Du aus. SQL-Befehle in phpMyAdmin-Dumps
beginnen immer mit DROP, CREATE, INSERT, UPDATE oder REPLACE und enden mit
einem Semikolon.

Wenn Du also eine Zeile erwischt, wo eines dieser Schlüsselworte am Anfang
steht, füllst Du diese Zeile und die nachfolgenden Zeilen, in eine
Variable ab - bis zu der Zeile einschließlich, die mit einem Semikolon
endet.

Dann führst Du den SQL-Befehl mit PHP aus, leerst anschließend die
Variable wieder und fährst dann ebenso mit dem nächsten SQL-Befehl fort,
bis Du am Ende der Datei angekommen bist. :-)

Das Ganze ist sicher nicht die performanteste Lösung. Die ginge über die
Kommandozeile. Die Laufzeit der hier aufgezeigten Lösung kann, gerade bei
großen Dumps, um ein Vielfaches größer sein. Daher mußt Du darauf achten,
daß Dein Skript ausreichend Laufzeit erlaubt bekommt. Stichwort:
set_time_limit. Dabei ist - wenn ich mich recht erinnere - zu bedenken,
daß set_time_limit nicht im Skript selbst zur Laufzeit gesetzt werden
kann, wenn safe_mode auf ON gesetzt ist.


Viele Grüße
Lutz


php::bar PHP Wiki   -   Listenarchive