Tach!
Jetzt hab ich ihn !!!
Mein Gefühl sagt mir, dass du etwas gefunden hast, das den Fehler vermeidet, aber nicht die wahre Ursache erkannt hast. Mir fällt sie aber auch grad nicht auf. Ich müsste das erstmal nachstellen, um zu sehen, ob das reproduzierbar ist, aber .. jetzt nicht.
if (is_object($this->resid)) @$this->resid->free_result();
Es darf nicht nur irgendein Objekt sein, sondern eins der Klasse mysqli_result. Prüf das lieber mit instanceof. Du solltest auch nciht die Fehlerausgabe unterdrücken, denn zu dieser Funktion ist nicht beschrieben, dass sie Fehler liefert. Du hättest ohne @ schon eher erkennen können, dass $this->resid->free() nicht aufgerufen werden konnte, wenn $this->resid gar kein Objekt mit der Methode free() ist.
Anscheint war in $dbi2->resid irgendein Wert (nach der UPDATE query) gespeichert,
Sowas lässt sich wenigstens mit einem var_dump() ergründen. Zudem steht es im PHP-Handbuch, was in welchem Fall zurückgegeben wird.
Grundsätzlich stellt sich mir die Frage, warum du einen Wrapper baust, statt die vorhandenen Klassen zu erweitern. Das ist muss nicht unsinnig sein, aber eine gute Begründung solltest du dafür zumindest haben. Die musst du mir auch nicht unbedingt sagen, aber zumindest für dich solltest du die mal ausformuliert haben (und dazu darüber nachgedacht haben).
Weiterhin: Warum gibt query() eine Result-ID zurück, wenn du doch eigentlich gedenkst, die Daten über data() zurückzugeben? Die braucht doch außerhalb des Objektes keiner. Je mehr der anwendende Code von den Interna des MySQL-Handling wissen muss, desto fragwürdiger wird der Einsatz deines Wrappers, und desto erwägenswerter wird es, lediglich die vorhandenen Klassen um die von dir vermisste Funktionalität zu erweitern.
dedlfix.