Never ever change a running system oder lebe mit den Konsequenzen.

Wirklich, niemals jemals. Und dann auch niemals die unterliegenden Queries verstecken. Aber erstmal der Reihe nach:

Heute kam mir der Gedanke, dass ich nun endlich mal weg von mysql_ hin zu mysqli_ (bzw. dessen OOP-Variante) migriere. Schließlich hagelt es ab einer der nächsten PHP-Versionen deprecated-Warnings, bis es dann irgendwann ganz rausgenommen wird. Und eh man dann am fertigen Werk alles umkrempelt kann man auch gleich an der unfertigen Baustelle rumdoktorn. Wer hätte es gedacht, die Austauscharbeiten betrugen allerhöchstens eine Stunde. Der Test meines Projektes zeigte zunächst keinerlei ungewöhnliches Verhalten.

Das bewog mich dazu, den Backend-Bereich weiter auszubauen. Hier liegen schon seit einer ganzen Weile die Menüadministration und die Inhaltsverwaltung auf Eis. Endlich sollte die Menüverwaltung zum Abschluss kommen, damit das lästige Direkt-in-der-Datenbank-Gefrickel aufhört. Nach Abschluss der Arbeiten (so ca. vor einer halben Stunde) wollte ich den neuen Stand gleich auf meinen Produktivserver spielen. Nach dem Einloggen im Backend und dem Versuch eine Menügruppe zu bearbeiten ranzte mich gleich einmal meine Datenbank-Zugriffsschicht an, dass doch bitte eine NULL-Ressource bei einem Fetch nichts zu suchen hätte. Bla blubb, weiß ich auch, sag mir lieber woher und wieso. Um dem ganzen das i-Tüpfelchen aufzusetzen habe ich die Datenbank-Zugriffsschicht so abgesichert, dass außer vagen Fehlerbeschreibungen keine Infos über das verursachende Query ausgespuckt werden. Aber das macht ja nichts, immerhin habe ich genau für diesen Fall eine Admin-Toolbar, die ich nur aktivieren muss und die mich dann mir allen Infos zu den Queries versorgen…. sollte.

Wer hätte es geahnt, das ging natürlich nicht. Das hier zugrundeliegende Framework hatte die Angewohnheit alle angefallenen Queries mittels EXPLAIN aufzudröseln. Das ging mit dem alten MySQL noch ohne Probleme, nur waren dank MySQLi einige der Statements mit dem Vermerk versehen, dass die Syntax nicht korrekt wäre. Schnell gegoogelt und den Schuldigen gefunden. Also das EXPLAIN-Feature erstmal ersatzlos gestrichen, ehrlich gesagt habe ich es kaum benutzt. Manuell reicht in dem Fall auch. Nachdem das nun behoben war, stellte ich jedoch fest, dass meine Queries alle scheinbar korrekt waren. Ich kürz an dieser Stelle mal ab: der Ausgangsfehler ging schlussendlich auf ein “G” im Tabellennamen eines Queries zurück, wo jedoch ein “g” hätte stehen müssen.

Im Prinzip also ein wahnsinnig kleiner Fehler, der jedoch erst nach X Stunden behoben werden konnte, da das Upgrade auf MySQLi und meine informationsscheue Datenbank-Zugriffsschicht mir ein paar zusätzliche Hürden aufstellten. Und wie hätte ich das ganze vermeiden können? Genau, indem ich von Anfang an auf einem Linux-System entwickelt hätte. Lokal habe ich nämlich Windows und das glänzt auch bei MySQL durch seine Kulanz bei der Groß- und Kleinschreibung. Und um den Bogen zurück zum Titel zu bekommen: lieber kleine Fehler im Code als ein schön verschenkter Sonntagnachmittag!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert