dedlfix: Ausgabe eingrenzen

Beitrag lesen

Tach!

auf http://stackoverflow.com/questions/2552545/mysqli-prepared-statements-error-reporting habe ich gelesen, dass ich die Fehler so abfangen kann

Ja, aber die() ist die schlechtestmögliche Art und Weise, auf Fehler zu reagieren. Das kann man mal für das Testen machen, aber im Produktivcode ist es meist nicht sinnvoll, dem Anwender die Ausgabe abzubrechen und eine solche detaillierte Fehlermeldung zu präsentieren. Da sollte man sich schon etwas mehr Gedanken machen, wie die Anwendung im Fehlerfall reagieren soll - aus der Sicht des Anwenders der zu seinem Ziel kommen will, und aus der Sicht des Betreibers, der einerseits keinen Anwender (Kunden) verlieren möchte und andererseits Informationen zur Ursache benötigt.

Damit erhalte ich folgende Meldung

prepare() failed: Commands out of sync; you can't run this command now

Was mich wundert, ich nutze diesen Löschbefehl auf anderen Unterseiten und dort funktioniert er einwandfrei.

Das Löschen ist nicht das Problem an sich. Hast du mal nach dem Fehlermeldungstext gesucht? Du hast grad noch die Ergebnismenge des Select offen und kannst derzeit keine weiteren Statements absetzen.

Wenn ich mich recht erinnere, holt PHP im Hintegrund die komplette Ergebnismenge ab und schließt das Resultset bereits beim Query, so dass das Problem gar nicht auftreten sollte. Ob das allerdings auch bei Prepared Statements so passiert, weiß ich grad nicht.

Alternativen:

  • Das Delete mit WHERE-Klausel direkt ausführen und nicht viele Deletes mit je einer Löschung.
  • Erstmal alle Ergebnisse holen, in einem Array ablegen und dann erst über dieses Array laufen.

dedlfix.