Mickymaus: multi_query fehlermeldungen

Sorry, ich krieg das irgendwie immer noch nicht hin und verstehe das nicht.

Ich habe eine multi_query bestehend aus X teilqueries von denen Y jeweils fehlschlagen. Ich möchte dann wenn Query 2 und 17 fehlgeschlagen sind für genau 2 und 17 die Fehlermeldungen bekommen. Im Moment bin ich so weit:

if($test->multi_query("SELECT test FROM gibtsnicht;SELECT test FROM gibtsauchicht")) {  
	do {  
		if(!$test->more_results()) {  
			break;  
		}  
		if(!$test->next_result()) {  
		     echo $test->error;  
			break;  
		}  
		else {  
		     $result = $test->store_result();  
		     var_dump($result);  
		}  
	}  
	while(true);  
}  
else {  
	echo $test->error;  
}

Mein Gedanke: Solange es ein weiteres result gibt (more_results()) soll er es mit next_result() laden und wenn das nicht möglich ist eben die Fehlermedlung ausgeben... Was aber mache ich bitte falsch, dass das hier nicht funktioniert?

Vielen Dank!

  1. Tach!

    Was aber mache ich bitte falsch, dass das hier nicht funktioniert?

    Beobachte und beschreibe bitte genauer was passiert und was du gern hättest. Und zwar nicht nur allgemein sondern bis hinunter zu den Werte deiner Variablen und den Funktionsergebnissen. Diese kannst du dir mit Kontrollausgaben anschauen.

    Ich habe eine multi_query bestehend aus X teilqueries von denen Y jeweils fehlschlagen. Ich möchte dann wenn Query 2 und 17 fehlgeschlagen sind für genau 2 und 17 die Fehlermeldungen bekommen. Im Moment bin ich so weit:

    [code lang=php]if($test->multi_query("SELECT test FROM gibtsnicht;SELECT test FROM gibtsauchicht")) {
    do {
    if(!$test->more_results()) {
    break;
    }

    Wenn nichts (mehr) da ist, dann raus.

      if(!$test->next\_result()) {  
           echo $test->error;  
      	break;  
      }  
    

    Das PHP-Handbuch ist ein wenig spärlich mit der Information, wann next_result() ein false liefert. Geht man mal davon aus, dass diese Funktion 1:1 von der MySQL-API übernommen wurde, dann sagt das MySQL-Handbuch, dass ein Fehler zurückgegeben wird, wenn kein nächstes Ergebnis mehr vorhanden ist. Das heißt also nach meinem Verständnis, dass du mit der Methode immer nur feststellen kannst, ob ein nächstes Ergebnis vorliegt oder nicht - nicht aber, ob das Ergebnis einen Fehler der zugehörigen Abfrage signalisiert.

    Das müsstest du selbst nachvollziehen können. Wenn du alles richtig machst, musst du so oft durch die Schleife laufen, wie Querys gestartet wurden - und das unabhängig vom Ergebnis der Abfragen. Wenn nicht, ist in deiner Abfrage-Logik was falsch. DU musst lediglich beachten, dass du das Ergebnis immer wieder wegräumst, sonst kommst du auch nicht vorwärts. Wenn du das erstmal grundsätzlich hinbekommen hast, kannst du die Code-Stelle so erweitern, dass du die Fehler und die eigentlichen Ergebnisse auswertest.

    dedlfix.