phpbar.de logo

Mailinglisten-Archive

[php] Mehrere Mysql-Queries mit php ?

[php] Mehrere Mysql-Queries mit php ?

Clemens Zvacek php_(at)_phpcenter.de
Wed, 15 May 2002 09:48:25 +0200


Tag,

kurz als Einleitung: habe eine Textdatei mit unheimlich vielen Datensaetzen, die ich erst im PHP 
aufbereiten muss. Die sollen in ein Mysqldatenbank. Die Datensaetze sollen auffrischbar sein, dass 
heisst wird die gleiche Datei mit leicht geaenderten Werten eingelesen und die Key-Werte haben sich 
nicht geaendert, so sollen die entsprechenden Felder in der DB mit "update" versehen werden. Wenn 
nicht vorhanden, dann "INSERT".

Das ganze geht auf einem 1000 AMD mit uebel viel Speicher noch immer quaelend langsam (fuer 2mb 
dauerts 30min!!). Linux "top" sagt mir, das der Bottleneck das Mysql ist.

Bislang nahm ich einen Datensatz aus der Datei, zerlegte ihn mittels Regexp und anderen Spaessen, 
schaute anhand der Keywerte in die Db, ob da oder nicht und machte demzufolge ein INSERT oder 
UPDATE.
Langsam.
Dann las ich im Mysqlmanual, dass man INSERTs doch gefaellixt in einem Rutsch abarbeiten sollte 
und nicht durch lahme Selects immer unterbrechen sollte, und dass ja jedesmal die Indizes neu erstellt 
usw.

Also, dachte ich mir, hauste einfach viele Anweisungen hintereinander ans MYSQL. Das geht leider mit 
PHP nicht, die Funktion mysql_query nimmt immer nur eine Anweisung an. 
Daraufhin die Idee, dynamisch am Ende des Scripts eine Datei mit den SQL-Anweisungen zu erstellen 
und diese mittels exec("mysql db < datei.sql"); einzulesen. Klappt so lala, nicht wirklich gut. 
Notwendige Zeilenumbrueche zerhaut das Mysql total, es werden hoechstens 20 Eintraege ordentlich 
eingelesen, dann meldet mysql das \\ kein Befehl sei (\\ kommt in Feldern vor, aber auch nur IN 
Feldern)

Das ist also nicht die Loesung. 

Deswegen die Fragen:

Kann man MYSQL mit PHP zu einer persistenten Verbindung ueberreden, so dass die ekeligen 
Neuconnects entfallen ? Kann man evt doch mehr als eine Query auf einen Rutsch absenden ?

Das ganze ist uebrigens ziemlich heikel, denn wenn die Daten erst am Ende des Scripts geschrieben 
werden oder gar noch spaeter, und evt durch einen anderen Mitarbeiter die gleiche Datei ebenfalls 
abgearbeitet wird, dann sind die Eintraege 2x drin. Und das ist mein Horror, darf nicht.

Also, wie gehts schneller mit MYSQL+PHP?


php::bar PHP Wiki   -   Listenarchive