Solucionar problemas

Joomla 1.0 y 1.5 con MySQL 8, error con la palabra reservada «groups»

Revisado el 3 min de lectura MySQL compatibilidad Joomla

Joomla 1.0 y 1.5 llevan muchos años sin actualizaciones de seguridad. Este arreglo sirve para mantener en marcha un proyecto antiguo mientras preparas su migración a una versión actual, no como solución definitiva.

Los problemas de un Joomla antiguo suelen venir de dos sitios. El primero es PHP, y se resuelve eligiendo en cPanel la versión de PHP que necesita la web. El segundo es MySQL: Joomla 1.0 y 1.5 funcionan bien con MySQL 5.7, pero fallan con MySQL 8.

Por qué falla con MySQL 8

MySQL 8 añadió nuevas palabras reservadas, palabras que no se pueden usar en una consulta SQL como nombre de columna o alias si no van entre comillas invertidas (`).

En Joomla el problema es la palabra groups, que antes estaba permitida y en MySQL 8 es reservada. Aparece en consultas de estos 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

Las consultas afectadas contienen AS groups, por ejemplo:

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

Solución: escapar «groups» con comillas invertidas

Haz antes una copia de la carpeta components/com_content (por ejemplo, comprímela desde el administrador de archivos de cPanel).

Abre cada uno de los ficheros anteriores y pon groups entre comillas invertidas en todas las coincidencias:

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

Guarda y repite en todos los ficheros. Con eso Joomla ya funciona con MySQL 8.

Hacerlo desde la terminal

Si tienes acceso a la Terminal de cPanel o por SSH, entra en la carpeta de Joomla y busca todos los ficheros con coincidencias:

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

Y corrígelos todos de una vez:

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

Vuelve a lanzar la búsqueda: si aún sale algún fichero, es que usa la palabra con otro alias distinto de g.name. Ábrelo y corrígelo a mano igual que arriba.

Comprobar que funciona

Abre la portada, una sección, una categoría y un artículo. Si sigue apareciendo un error SQL, copia el mensaje completo: si menciona otra palabra cerca de near '...', búscala en la lista de palabras reservadas de MySQL 8 y escápala de la misma forma. Si el error menciona otra extensión (por ejemplo, un componente de terceros), la corrección va en sus ficheros, dentro de components/ o modules/.

También te puede ayudar

¿Algo no cuadra o ha cambiado? Cuéntanoslo y lo revisamos.