Resolver problemas
Joomla 1.0 e 1.5 com o MySQL 8, erro com a palavra reservada «groups»
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
- Conflito com a tabela «system» do Drupal no MySQL 8 (erro 1064) Resolva o erro 1064 do Drupal 6 e 7 com o MySQL 8 causado pela tabela system, palavra reservada: atu...
- PrestaShop: «An exception occurred while establishing a connection to figure out your platform version» Solução para o erro SQLSTATE[HY000] [2026] SSL_CTX_set_default_verify_paths failed ao instalar ou at...
- Tabelas corrompidas numa base de dados MySQL Confirme o erro e o motor de uma tabela antes de a reparar, conserve uma cópia e evite aplicar REPAI...
- Algumas bases de dados não aparecem no phpMyAdmin Verifique se a base pertence à conta e peça a revisão das permissões ou do mapa do cPanel quando apa...
Algo não bate certo ou mudou? Diga-nos e revemos.