kann mir wer sagen, ob ich mit einer einzigen mysql_query mehrere Befehle gleichzeitig ausführen kann? Wenn ja, wie muß der Befehl aussehen bzw. worauf muß ich achten?
Ich hatte das heute schon mal probiert, aber irgendwie hat das nicht so recht geklappt.
Gehen tut es,
geht ja auch in Fällen von SQL Injektions.
musst halt bis auf den letzten SQL Befehl alle mit einem ; abschließen.
Es ist nur die Frage ob du das machen möchtest, da du die damit natürlich die Rückgabewerte von mysql_query kaputt machst und die Wartung des Quelltextes um einiges komplizierter wird.
Gruß
Phillip
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Gehen tut es,
geht ja auch in Fällen von SQL Injektions.
musst halt bis auf den letzten SQL Befehl alle mit einem ;
abschließen.
Das hätte ich auch gedacht, daß es so gehen müßte. Wie man der anderen Antwort Deines Kollegen entnehmen kann, geht das aber wohl doch nicht.
Es ist nur die Frage ob du das machen möchtest, da du die
damit natürlich die Rückgabewerte von mysql_query kaputt
machst und die Wartung des Quelltextes um einiges
komplizierter wird.
Ich wollte eigentlich gar kein kompliziertes Konstrukt erarbeiten. Aber wenn ich irgendwo einen Tabellendump geliefert bekomme, stecken da ja jede Menge Daten mit einzelnen aufeinanderfolgenden SQL-Befehlen drin. Eine solche Datei wollte ich automatisch per PHP verarbeiten. Es ist nämlich gar nicht so einfach, so ein File in exaxt einzelne Befehle zu zerstückeln.
Oder aber es ist einfach und ich komme nur nicht auf den richtigen Trichter.
Gehen tut es,
geht ja auch in Fällen von SQL Injektions.
musst halt bis auf den letzten SQL Befehl alle mit einem ;
abschließen.
Das hätte ich auch gedacht, daß es so gehen müßte. Wie man der
anderen Antwort Deines Kollegen entnehmen kann, geht das aber
wohl doch nicht.
sry hatte nur kurz in die deutsche doku rein geschaut. da war kein hinweis auf die einzelnen querys drin.
Es ist nur die Frage ob du das machen möchtest, da du die
damit natürlich die Rückgabewerte von mysql_query kaputt
machst und die Wartung des Quelltextes um einiges
komplizierter wird.
Ich wollte eigentlich gar kein kompliziertes Konstrukt
erarbeiten. Aber wenn ich irgendwo einen Tabellendump
geliefert bekomme, stecken da ja jede Menge Daten mit
einzelnen aufeinanderfolgenden SQL-Befehlen drin. Eine solche
Datei wollte ich automatisch per PHP verarbeiten. Es ist
nämlich gar nicht so einfach, so ein File in exaxt einzelne
Befehle zu zerstückeln.
Oder aber es ist einfach und ich komme nur nicht auf den
richtigen Trichter.
Gruß
Thomas
sollte doch eigentlich mit explode (";\n",$file); gehen.
Wenn jeder stringt mit einem ;\n endet.
gruß
Phillip
sry hatte nur kurz in die deutsche doku rein geschaut. da war
kein hinweis auf die einzelnen querys drin.
Kein Problem, das selbe Problem hatte ich nämlich auch.
sollte doch eigentlich mit explode (";\n",$file); gehen.
Wenn jeder stringt mit einem ;\n endet.
Tut er aber leider nicht. Da bräuchte ich ja schon mal kein explode, da der Text ja eh schon Zeilenweise aus der Datei kommt. Leider kommt es halt durchaus vor, daß eine einzelne SQL-Anweisung auf mehrere Zeilen verteilt ist.
Nun hatte ich ja schon die Idee, zuerst die Zeilen zusammenzufassen und dann explode(";",$string) drüber laufen zu lassen. Nun habe ich aber immer noch das Problem, daß halt leider dieses Zeichen auch einmal mitten im String vorkommen kann. Es steht zwar dann irgendwo innerhalb von irgendwelchen Klammern, Anführungszeichen oder ähnlichem, aber wie soll ich das dann wieder herausfinden?
zusammenzufassen und dann explode(";",$string) drüber laufen
das ist mal die bequemste Lösung. Funktioniert halt leider nur, falls nirgens ein ; mitten in einem Standardwert vorkommt, was man ja nie ganz ausschließen kann.
Hier müßte man eine Lösung finden, wie man herausfindet, wann es mitten im Befehl drin steckt.
indem du nach nem ;\n suchst
Was soll mir das bringen? Das kommt meist öfters auch innerhalb eines kompletten SQL-Strings vor.
Oder du Splitest die Tabelle halt nach SELECT , DELETE ,
UPDATE , INSERT … auf dann hast du auf jedem fall nur das
letzte query
Das wäre noch eine Möglichlkeit. Das würde aber auch wieder voraussetzen, daß man auf alle möglichen SQL-Befehle überprüft. Wäre eine denkbare Lösung, aber auf die Schnelle habe ich keine Idee, wie ich das umsetzen sollte.