Joomla versiones antiguas, compatibilidad con MySQL 8

Aunque bajo ninguna circunstancia recomendamos ejecutar instalaciones de Joomla obsoletas por los riesgos de seguridad que implica, como por ejemplo las ramas 1 o 1.5, también sabemos que existen muchos proyectos de tipo "legacy" que por unos u otros motivos, requieren aún de soporte.

Los principales problemas de compatibilidad vienen de PHP, por suerte en nuestro entorno puedes seleccionar la versión de PHP que necesites, evitando cualquier conflicto.

La otra capa estaría en MySQL, Joomla 1 y 1.5 funciona bastante bien con MySQL 5.7, pero, en cambio, da algunos problemas de funcionamiento con la versión 8 (sucesor de 5.7).

Estos problemas son causa de las palabras reservadas, estas no son más que palabras que no deben usarse en las sentencias SQL, o al menos no sin ser correctamente escapadas (encapsuladas usando backticks `).

En el caso de Joomla el problema viene con la palabra groups, antes permitida y ahora reservada en MySQL 8, esta se encuentra presente en varias consultas SQL como en los ficheros:

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

Basta con acceder y localizar las coincidencias de "AS groups", por ejemplo:

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

Agrupamos dentro de los backticks la palabra "groups":

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

Guardamos y listo, repetimos con todas las coincidencias y ya sería compatible con MySQL 8.

Además desde la terminal podríamos buscar todas las coincidencias con el comando find.

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

Incluso combinado con sed, podemos hacer una búsqueda y corrección masiva:

find . -name "*.php" -type f -print0 | xargs -0 grep -ls 'AS groups,' | xargs sed -i 's/AS groups,/AS `groups`,/g'