Mehrere Befehle gleichzeitig mit mysql_query

Hallo,

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.

Gruß

Thomas

also ich könnte mir vorstellen das es so geht bzw. das du das meinst:

NSERT INTO table (a, b, c) VALUES
(‚d‘, ‚e‘, ‚f‘),
(‚g‘, ‚h‘, ‚i‘),
(‚j‘, ‚k‘, ‚l‘);

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Valkuere,

also ich könnte mir vorstellen das es so geht bzw. das du das
meinst:

NSERT INTO table (a, b, c) VALUES
(‚d‘, ‚e‘, ‚f‘),
(‚g‘, ‚h‘, ‚i‘),
(‚j‘, ‚k‘, ‚l‘);

Nicht ganz. Das wäre ja nur ein SQL-Befehl. Ich möchte z.B.

delete…
und anschließend
insert into…
in einem Aufruf zusammenfassen.

Gruß

Thomas

Nicht ganz. Das wäre ja nur ein SQL-Befehl. Ich möchte z.B.

delete…
und anschließend
insert into…
in einem Aufruf zusammenfassen.

nimm replace

Hallo Valkuere,

also ich könnte mir vorstellen das es so geht bzw. das du das

Was ist eigentlich das Problem 2x mysql_query() zu schreiben?Bei gleichen Inhalt nimmt man halt Strg+C --> Strg+V

meinst:

NSERT INTO table (a, b, c) VALUES
(‚d‘, ‚e‘, ‚f‘),
(‚g‘, ‚h‘, ‚i‘),
(‚j‘, ‚k‘, ‚l‘);

Nicht ganz. Das wäre ja nur ein SQL-Befehl. Ich möchte z.B.

delete…
und anschließend
insert into…
in einem Aufruf zusammenfassen.

Gruß

Thomas

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]

Hallo,

kann mir wer sagen, ob ich mit einer einzigen mysql_query
mehrere Befehle gleichzeitig ausführen kann?

Mehrere mysql_query verwenden, pro mysql_query geht nur ein Befehl.

http://php.net/mysql_query :

 mysql\_query() sends an unique query (multiple queries are not supported)....

Alexander

Hallo Phillip,

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.

Gruß

Thomas

Hallo Phillip,

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

Hallo 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. :smile:

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?

Gruß

Thomas

zusammenzufassen und dann explode(";",$string) drüber laufen

indem du nach nem ;\n suchst :wink:

Oder du Splitest die Tabelle halt nach SELECT , DELETE , UPDATE , INSERT … auf dann hast du auf jedem fall nur das letzte query
Gruß
Phillip

Hallo Philip,

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 :wink:

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.

Gruß

Thomas

gib doch mal bitte eine beispieldatei die darüber importiert werden soll.

Gruß
Phillip

Hallo Phillip,

gib doch mal bitte eine beispieldatei die darüber importiert
werden soll.

kann ich Dir die per Mail schicken?

Gruß

Thomas

klaro