У меня реализовано множество проектов с использованием DLE (Datalife Engine), и со временем я принял решение больше не поддерживать у себя на сервере старые версии MySQL, а только 8-ю. В результате я столкнулся с проблемами на сайтах использующих старые версии DLE, которые перестали работать.
В запросах часто используются структуры вроде category regexp '[[:<:]]($catid)[[:>:]]'
которые стали недопустимыми в MySQL 8. Возможным вариантом решения проблемы может быть использование запроса вида category regexp '^((.*),)?($catid)(,(.*))?$'
.
Следовательно, наша задача - заменить устаревший код на новый (рабочий) во всех местах его использования.
В интернете часто советуют просто отключить опцию "Включить поддержку мультикатегорий на сайте" (вкладка "Оптимизация запросов к базе данных"), и тогда ошибок больше не возникнет. Это, в определенном смысле, действительно так. В некоторых версиях DLE устаревшие запросы работают только при включенной данной опции. Далее в статье я уточню, в каких версиях это может оказаться недостаточным. Кроме того, если вы используете эту опцию, вероятно, она вам нужна, и лучше исправить ошибку в коде, чтобы в будущем, при её отключении, не сталкиваться с подобными проблемами.
Наилучшим подходом будет внести изменения вручную для каждого найденного совпадения. Для поиска используйте команду:
grep -r -n "\[\[:<:\]\]" /path_domain/
Ниже приведены только те версии, с которыми я сталкивался лично и где на практике решал данную проблему.
Проблему невозможно решить отключив опцию, код используется в пользователях и в администрировании новостей без запроса опции. Файлы:
/engine/engine.php
/engine/api/api.class.php
/engine/ajax/registration.php
/engine/inc/categories.php
/engine/inc/editnews.php
/engine/modules/favorites.php
/engine/modules/functions.php
/engine/modules/lastcomments.php
/engine/modules/register.php
/engine/modules/search.php
/engine/modules/show.full.php
Проблему можно решить отключив опцию. Файлы:
/engine/api/api.class.php
/engine/modules/functions.php
/engine/modules/show.full.php
Проблему можно решить отключив опцию. Файлы:
/engine/api/api.class.php
/engine/modules/show.full.php
Не указываю количество замен и номера строк, поскольку в моих собственных проектах практически в каждом файле имелись различия из-за индивидуальных правок, которые я вносил.
После внесения необходимых изменений в соответствующие файлы, я смог без активации опции "Включить поддержку мультикатегорий на сайте" восстановить функциональность своих сайтов, используя СУБД MySQL 8.