Sehr geehrte User,
wie der Titel schon verlauten lässt,
möchte ich mehrere mysql-Anfragen 'gleichzeitig' bearbeiten.
Im speziellen Anwendungsfall erstellen wir stets ca. 100 bis 200 Tabellen.
Wenn jede Tabelle einzeln erstellt und anschließend befüllt wird
sind das bis zu 400 mysql_query() Aufrufe!
Dies dauert bis zu mehreren Minuten. (xampp)
Als schneller und einfacher erweist es sich, diese bis zu 400 Anweisungen per Semikolon getrennt an mysql_query() zu übergeben! Damit habe ich auf einmal nur noch einen Aufruf, an Stelle von 400'en!
ABER: Sollte zwischendurch ein MYSQL-Befehl schief gehen,
werden die restlichen auch nicht mehr ausgeführt.
Da mysql_query() stets nur den ersten Anfragestatus zurückgibt, kann ich mit mysql_errno() nicht testen, ob zwischendurch irgendwann eine Anfrage fehl schlug.
Mit mysql_next_result() kann ich zwar jeden einzelnen Aufruf in einer Schleife durch gehen, und jeden auf mysql_errno() testen, jedoch habe ich damit schon wieder viel zu viele Aufrufe und wiederum keine Zeitersparnis!!
Meine Überlegung war nun, einfach nachzuschauen, ob die allerletzte Tabelle angelegt wurde.
Im Normalfall, wenn kein Fehler auftrat, ist dem so!
Sollte die Tabelle nicht vorhanden sein, könnte ich immer noch in einer Schleife per mysql_next_result() und mysql_errno() auf Fehler testen.
Für den Fall, dass ein Fehler auftrat, würde ich die Zeitkosten in Kauf nehmen,
da Fehler ja nicht auf der Tagesordnung stehen.
Doch, kann ich nach einem misslungenen mysql_query() irgendwie kein weiteres aufrufen, ich bekomme dann ständig die Fehlermeldung:
"Commands out of sync; you can't run this command now"
Und auch wenn ich testen könnte, ob die Tabelle angelegt wurde oder nicht,
wie könnte ich dann noch auf die Resultate von vorher zugreifen, um den Fehler-Report finden und ausgeben zu können?
Fragen:
- Wie könnte ich nach dem Query Aufruf am besten prüfen,
ob die Aufrufe fehl schlugen?
- Habt ihr eine Alternative Idee?
Mit freundlichen Grüßen
Predat0hr
Ps.: Ich programmiere derzeit unter Visual Studio 2008 in C++/CLI !
wie der Titel schon verlauten lässt,
möchte ich mehrere mysql-Anfragen 'gleichzeitig' bearbeiten.
Im speziellen Anwendungsfall erstellen wir stets ca. 100 bis 200 Tabellen.
Wenn jede Tabelle einzeln erstellt und anschließend befüllt wird
sind das bis zu 400 mysql_query() Aufrufe!
Dies dauert bis zu mehreren Minuten. (xampp)
Als schneller und einfacher erweist es sich, diese bis zu 400 Anweisungen per Semikolon getrennt an mysql_query() zu übergeben! Damit habe ich auf einmal nur noch einen Aufruf, an Stelle von 400'en!
ABER: Sollte zwischendurch ein MYSQL-Befehl schief gehen,
werden die restlichen auch nicht mehr ausgeführt.
Da mysql_query() stets nur den ersten Anfragestatus zurückgibt, kann ich mit mysql_errno() nicht testen, ob zwischendurch irgendwann eine Anfrage fehl schlug.
Mit mysql_next_result() kann ich zwar jeden einzelnen Aufruf in einer Schleife durch gehen, und jeden auf mysql_errno() testen, jedoch habe ich damit schon wieder viel zu viele Aufrufe und wiederum keine Zeitersparnis!!
Meine Überlegung war nun, einfach nachzuschauen, ob die allerletzte Tabelle angelegt wurde.
Im Normalfall, wenn kein Fehler auftrat, ist dem so!
Sollte die Tabelle nicht vorhanden sein, könnte ich immer noch in einer Schleife per mysql_next_result() und mysql_errno() auf Fehler testen.
Für den Fall, dass ein Fehler auftrat, würde ich die Zeitkosten in Kauf nehmen,
da Fehler ja nicht auf der Tagesordnung stehen.
Doch, kann ich nach einem misslungenen mysql_query() irgendwie kein weiteres aufrufen, ich bekomme dann ständig die Fehlermeldung:
"Commands out of sync; you can't run this command now"
Und auch wenn ich testen könnte, ob die Tabelle angelegt wurde oder nicht,
wie könnte ich dann noch auf die Resultate von vorher zugreifen, um den Fehler-Report finden und ausgeben zu können?
Fragen:
- Wie könnte ich nach dem Query Aufruf am besten prüfen,
ob die Aufrufe fehl schlugen?
- Habt ihr eine Alternative Idee?
Mit freundlichen Grüßen
Predat0hr
Ps.: Ich programmiere derzeit unter Visual Studio 2008 in C++/CLI !
Comment