Fehlerbehebung

Joomla 1.0 und 1.5 mit MySQL 8, Fehler mit dem reservierten Wort „groups“

Geprüft am 3 Min. Lesezeit MySQL Kompatibilität Joomla

Joomla 1.0 und 1.5 erhalten seit vielen Jahren keine Sicherheitsupdates mehr. Diese Korrektur dient dazu, ein altes Projekt am Laufen zu halten, während Sie seine Migration auf eine aktuelle Version vorbereiten, nicht als endgültige Lösung.

Die Probleme eines alten Joomla kommen meist aus zwei Richtungen. Die erste ist PHP; das lösen Sie, indem Sie in cPanel die PHP-Version wählen, die die Website braucht. Die zweite ist MySQL: Joomla 1.0 und 1.5 funktionieren gut mit MySQL 5.7, scheitern aber an MySQL 8.

Warum es mit MySQL 8 fehlschlägt

MySQL 8 hat neue reservierte Wörter eingeführt, Wörter, die in einer SQL-Abfrage nicht als Spaltenname oder Alias verwendet werden können, wenn sie nicht in Backticks (`) stehen.

In Joomla ist das Problem das Wort groups, das früher erlaubt war und in MySQL 8 reserviert ist. Es kommt in Abfragen dieser Dateien vor:

components/com_content/models/section.php
components/com_content/models/article.php
components/com_content/models/frontpage.php
components/com_content/models/category.php

Die betroffenen Abfragen enthalten AS groups, zum Beispiel:

...u.usertype, cc.title AS category, g.name AS groups...

Lösung: „groups“ mit Backticks maskieren

Erstellen Sie vorher eine Kopie des Ordners components/com_content (komprimieren Sie ihn zum Beispiel im Dateimanager von cPanel).

Öffnen Sie jede der oben genannten Dateien und setzen Sie groups bei allen Treffern in Backticks:

...u.usertype, cc.title AS category, g.name AS `groups`...

Speichern Sie und wiederholen Sie das in allen Dateien. Damit funktioniert Joomla mit MySQL 8.

Im Terminal erledigen

Wenn Sie Zugang zum Terminal von cPanel oder per SSH haben, wechseln Sie in den Joomla-Ordner und suchen Sie alle Dateien mit Treffern:

find . -name "*.php" -type f -print0 | xargs -0 grep -l 'AS groups'

Und korrigieren Sie alle auf einmal:

find . -name "*.php" -type f -exec sed -i 's/g\.name AS groups/g.name AS `groups`/g' {} \;

Starten Sie die Suche erneut: Wenn noch eine Datei erscheint, verwendet sie das Wort mit einem anderen Alias als g.name. Öffnen Sie sie und korrigieren Sie sie von Hand wie oben.

Prüfen, ob es funktioniert

Öffnen Sie die Startseite, eine Sektion, eine Kategorie und einen Beitrag. Wenn weiterhin ein SQL-Fehler erscheint, kopieren Sie die vollständige Meldung: Wenn sie bei near '...' ein anderes Wort nennt, suchen Sie es in der Liste der reservierten Wörter von MySQL 8 und maskieren Sie es auf dieselbe Weise. Wenn der Fehler eine andere Erweiterung nennt (zum Beispiel eine Komponente eines Drittanbieters), gehört die Korrektur in deren Dateien, in components/ oder modules/.

Das könnte Ihnen auch helfen

Stimmt etwas nicht oder hat sich etwas geändert? Erzählen Sie es uns, und wir prüfen es.