Joomla und MySQL 5

Leider ist für das CMS Joomla eine funktionierende Version, die unter der neuen MySQL Version 5 läuft noch nicht erschienen. Laut Roadmap ist dieses auch nicht vor der Version 1.1 geplant.

Seit der Joomla Version 1.0.7 liegt aber im Ordner „includes“ die Datei database.mysql5.php, die zumindest einen Prototype-Treiber für MySQL 5 darstellen soll. Leider funktioniert diese Version sowie alle anderen im Joomla.org-Forum erhältlichen nicht einwandfrei. Tauscht man die File wie angegeben gegen die Datei database.php aus, versagt Joomla seinen Dienst und man erhält beim aufrufen der URL nur eine weisse Seite.

Stellt man per php.ini oder .htaccess das Error-Handling von PHP an, bekommt man zumindest ansatzweise eine Information, wieso das CMS nicht funktioniert:

Fatal error: Call to undefined method mosSession::_setSchema() in database.php on line 757

Wie es ausshieht, hat sich in der Joomla-Community bislang über diesen Fehler noch niemand Gedanken gemacht, geschweige denn eine Lösung eroiert. Stattdessen wird zum Downgrade geraten. Zugegeben, eine Lösung, die vielleicht für Leute mit einem eigenen Server interessant ist, setzt aber der Hosting-Provider MySQL 5 ein, wird es kompliziert, zumal die Lösung des Problems sehr einfach ist … zumindest auf den ersten Blick!

Debuggt man das Joomla-System einwenig und schaut sich den entsprechenden Code der Datei database.mysql5.php etwas näher an, so fällt einem folgendes auf:

In der abstracten Classe mosDBTable gibt es die private member Funktion &_getSchema(), die auch anstandslos aufgerufen wird. Dort wird die ebenfalls als privat member declarierte setSchema() aufgerufen, die aber nicht als solche geschrieben ist (ca. Zeile 760). Korregiert man die Schreibweise, also schreibt &_setSchema() anstatt setSchema(), läuft Joomla auch mit MySQL 5 anstandslos.

.. zumindest auf den ersten Blick. Ob auch alle Module (vorallem 3rd party) laufen, kann ich bis dato nicht sagen. Zumindest das Module SimpleFAQ 2.11 scheint mit dem oben genannten WorkAround nicht zu funktionieren.