Resolver problemas

Joomla 1.0 e 1.5 com o MySQL 8, erro com a palavra reservada «groups»

Revisto a 3 min de leitura MySQL compatibilidade Joomla

O Joomla 1.0 e o 1.5 estão há muitos anos sem atualizações de segurança. Esta correção serve para manter em funcionamento um projeto antigo enquanto prepara a sua migração para uma versão atual, não como solução definitiva.

Os problemas de um Joomla antigo costumam vir de dois sítios. O primeiro é o PHP, e resolve-se escolhendo no cPanel a versão de PHP de que o site precisa. O segundo é o MySQL: o Joomla 1.0 e o 1.5 funcionam bem com o MySQL 5.7, mas falham com o MySQL 8.

Porque falha com o MySQL 8

O MySQL 8 acrescentou novas palavras reservadas, palavras que não podem ser usadas numa consulta SQL como nome de coluna ou alias se não estiverem entre acentos graves (`).

No Joomla, o problema é a palavra groups, que antes era permitida e no MySQL 8 é reservada. Aparece em consultas destes ficheiros:

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

As consultas afetadas contêm AS groups, por exemplo:

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

Solução: escapar «groups» com acentos graves

Faça antes uma cópia da pasta components/com_content (por exemplo, comprima-a a partir do gestor de ficheiros do cPanel).

Abra cada um dos ficheiros anteriores e coloque groups entre acentos graves em todas as ocorrências:

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

Guarde e repita em todos os ficheiros. Com isso, o Joomla já funciona com o MySQL 8.

Fazê-lo a partir do terminal

Se tiver acesso ao Terminal do cPanel ou por SSH, entre na pasta do Joomla e procure todos os ficheiros com ocorrências:

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

E corrija-os todos de uma vez:

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

Volte a fazer a pesquisa: se ainda aparecer algum ficheiro, é porque usa a palavra com outro alias diferente de g.name. Abra-o e corrija-o manualmente como acima.

Verificar que funciona

Abra a página inicial, uma secção, uma categoria e um artigo. Se continuar a aparecer um erro SQL, copie a mensagem completa: se mencionar outra palavra perto de near '...', procure-a na lista de palavras reservadas do MySQL 8 e escape-a da mesma forma. Se o erro mencionar outra extensão (por exemplo, um componente de terceiros), a correção faz-se nos seus ficheiros, dentro de components/ ou modules/.

Também lhe pode ser útil

Algo não bate certo ou mudou? Diga-nos e revemos.