1/Адаптируем старые версии DLE к MySQL 8

Введение

У меня реализовано множество проектов с использованием DLE (Datalife Engine), и со временем я принял решение больше не поддерживать у себя на сервере старые версии MySQL, а только 8-ю. В результате я столкнулся с проблемами на сайтах использующих старые версии DLE, которые перестали работать.

Datalife Engine

Суть проблемы

В запросах часто используются структуры вроде category regexp '[[:<:]]($catid)[[:>:]]' которые стали недопустимыми в MySQL 8. Возможным вариантом решения проблемы может быть использование запроса вида category regexp '^((.*),)?($catid)(,(.*))?$'.

Следовательно, наша задача - заменить устаревший код на новый (рабочий) во всех местах его использования.

В интернете часто советуют просто отключить опцию "Включить поддержку мультикатегорий на сайте" (вкладка "Оптимизация запросов к базе данных"), и тогда ошибок больше не возникнет. Это, в определенном смысле, действительно так. В некоторых версиях DLE устаревшие запросы работают только при включенной данной опции. Далее в статье я уточню, в каких версиях это может оказаться недостаточным. Кроме того, если вы используете эту опцию, вероятно, она вам нужна, и лучше исправить ошибку в коде, чтобы в будущем, при её отключении, не сталкиваться с подобными проблемами.

Настройки сайта

Наилучшим подходом будет внести изменения вручную для каждого найденного совпадения. Для поиска используйте команду:

grep -r -n "\[\[:<:\]\]" /path_domain/

Решение проблемы

Ниже приведены только те версии, с которыми я сталкивался лично и где на практике решал данную проблему.

Версия 9.6 и 10.1

Проблему невозможно решить отключив опцию, код используется в пользователях и в администрировании новостей без запроса опции. Файлы:
/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

Версия 12.0.

Проблему можно решить отключив опцию. Файлы:
/engine/api/api.class.php
/engine/modules/functions.php
/engine/modules/show.full.php

Версия 13.1.

Проблему можно решить отключив опцию. Файлы:
/engine/api/api.class.php
/engine/modules/show.full.php

Не указываю количество замен и номера строк, поскольку в моих собственных проектах практически в каждом файле имелись различия из-за индивидуальных правок, которые я вносил.

Заключение

После внесения необходимых изменений в соответствующие файлы, я смог без активации опции "Включить поддержку мультикатегорий на сайте" восстановить функциональность своих сайтов, используя СУБД MySQL 8.