Max. Befehle pro MySQL-Query
Florian
- php
0 vaudi0 Tom
0 dedlfix0 Vinzenz Mai0 dedlfix
0 Vinzenz Mai
Servus!
Ich habe hier ca. 2000 SQL-Queries (alles INSERT). Wenn ich die alle in einen PHP-String packe und den dann ausführe, erhalte ich eine Fehlermeldung. Selber String in eine Datei und dann als MySQL-Batch über die Kommandozeile ist kein Problem. Genausowenig, wie das einzelne Ausführen jeder Zeile.
Wieviele SQL-Queries kann ich denn in eine Variable packen? Bzw. Wie lang darf die werden?
Hallöchen!
...erhalte ich eine Fehlermeldung
Und welche?
Gut, 2000 Queries auf einmal hab ich noch nicht gehabt, paar hundert schon.
Im PHP-String müssen die einzelnen Queries mit einem Semikolon getrennt sein.
...(alles INSERT)
Dann müsste theoretisch eine Query ausreichen:
INSERT INTO tabelle VALUES
(Datensatz 1),
(Datensatz 2),
(...),
(letzter...);
Setzt aber voraus, dass (...) jeweils Inhalte für ALLE Spalten der Tabelle in der richtigen Reihenfolge enthält.
MfG
vaudi
Hello,
Dann müsste theoretisch eine Query ausreichen:
INSERT INTO tabelle VALUES
(Datensatz 1),
(Datensatz 2),
(...),
(letzter...);
Und so ein Multi-Insert hat den unangenehmen Nachteil, dass man nicht erfährt, welches Insert geklappt hat und welches nicht.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
echo $begrüßung;
Ich habe hier ca. 2000 SQL-Queries (alles INSERT). Wenn ich die alle in einen PHP-String packe und den dann ausführe, erhalte ich eine Fehlermeldung. Selber String in eine Datei und dann als MySQL-Batch über die Kommandozeile ist kein Problem. Genausowenig, wie das einzelne Ausführen jeder Zeile.
Das ist richtig so, verarbeitet doch die MySQL-API-Funktion mysql_query() per Default nur ein Statement. Möchte man mehrere verarbeiten muss man C API Handling of Multiple Statement Execution beachten.
PHP hat das in der mysqli-Extension umgesetzt mit mysql_multi_query() umgesetzt.
Diese Vorgehensweise verhindert bei SQL-Injection-Lücken die Ausführung eines zweiten, vom Programmierer nicht beabsichtigten Statements. Allerdings bleibt auch mit einem Statement noch genügend Schadenspotenzial vorhanden, so dass das kein Freibrief ist, auf SQL-Injection-Vorsorge zu verzichten.
Wieviele SQL-Queries kann ich denn in eine Variable packen? Bzw. Wie lang darf die werden?
Die Variablenlänge ist nicht begrenzt aber auch nicht das Problem an der Geschichte.
echo "$verabschiedung $name";
Hallo dedlfix,
Die Variablenlänge ist nicht begrenzt
max_allowed_packet stellt eine Begrenzung dar.
Ob diese bei den 2000 INSERT-Queries des OP bereits zuschlägt, läßt sich
nicht beantworten, da der OP ja die Fehlermeldung unterschlagen hat.
Freundliche Grüße
Vinzenz
echo $begrüßung;
Die Variablenlänge ist nicht begrenzt
max_allowed_packet stellt eine Begrenzung dar.
Ob diese bei den 2000 INSERT-Queries des OP bereits zuschlägt, läßt sich nicht beantworten, da der OP ja die Fehlermeldung unterschlagen hat.
<pedantic>Das hat ja auch nichts mit PHP-Variablen sondern mit der Kommunikation zwischen MySQL und Clients zu tun.</pedantic>
Es wird nur ein Syntaxfehler kommen, der sich über das erste ; beschwert. Für mich ist das Problem recht zweifelsfrei beschrieben. Als Lösung gibt es nur, den Brocken auf einzelne Statemente aufzubrechen (was nicht ganze einfach ist, weil ; innerhalb von Daten nicht als Statement-Trennzeichen gewertet werden dürfen), ein einzelnes INSERT mit mehreren gleichzeitig einzufügenden Datensätzen zu verwenden (wobei hier die von dir erwähnte Paketlänge zu beachten ist), mysqli_multi_query() (inklusive Umstieg auf mysqli) oder die Kommandozeile zu bemühen (wobei such hier max_allowed_packet zuschlägt).
echo "$verabschiedung $name";
Hallo Florian,
Ich habe hier ca. 2000 SQL-Queries (alles INSERT). Wenn ich die alle in einen PHP-String packe und den dann ausführe, erhalte ich eine Fehlermeldung.
welche Fehlermeldung erhältst Du?
Freundliche Grüße
Vinzenz