Грешка SET @@session.sql_mode = ‘MYSQL40’ при инсталация на OpenCart 3+ върху сървър с MySQL 8
Ако използвате Ubuntu Server 20.04 LTS и се опитвате да инсталирате някоя от последните версии на OpenCart 3.0 (при нас проблемът възникна с OpenCart 3.0.3.6), вероятно ще се сблъскате с проблем на стъпка 3 на инсталатора.
След като попълните всички данни за връзка с базата данни и за акаунта на администратора на новоинсталираната платформа, браузерът ще ви покаже празен екран, а ако отворите лога за грешки на web сървъра, ще намерите в него следното съобщение:
AH01071: Got error 'PHP message: PHP Fatal error: Uncaught Exception: Error: Variable 'sql_mode' can't be set to the value of 'MYSQL40'
Error No: 1231 SET @@session.sql_mode = 'MYSQL40' in /home/xxx/public_html/system/library/db/mysqli.php
Причината е, че OpenCart все още съдържа в себе си някои удивителни анахронизми, наследени от времето на версия 1.1, която е писана 2008 г., когато се е използвала СУБД MySQL версия 4. Няколко години по-късно тази версия излиза от употреба и се наследява от MySQL 5, но вместо да пренапише кода на заявките към базата данни във всички модели, екипът на OpenCart решава да инструктира MySQL 5 да се държи като MySQL 4.
Още няколко години по-късно стигаме до 2020 г., когато актуалната версия на Ubuntu Server вече е 20.04 и вместо с остаряващия MySQL 5, вече е окомплектована с MySQL 8 — чувствително по-бърза СУБД. Същевременно проблемната конструкция е обявена за deprecated още в MySQL 5.7.22 (април 2018 г.) и още тогава (т.е. преди 2.5 години) е било ясно, че тя ще отпадне от спецификацията на MySQL 8.
OpenCart обаче все още безгрижно се опитва да подаде към базата данни команда за установяване на СУБД в режим MYSQL4, базата връща към PHP цитираното съобщение за грешка и браузерът зависва на бял екран, понеже никой не му казва какво да отпечата.
Може би, може би проблемът ще бъде решен, когато OpenCart навлезе официално във версия 3.1, но кога ще стане това, можем само да гадаем (3.1.0.0_a1 е създадена юли 2018 г.)
За да коригирате този проблем и да завършите успешно инсталацията на своя OpenCart 3.0, отворете следния файл: install/model/install/install.php
(релативно към public_html директорията) и слезте до ред 29. Там ще намерите тази команда:
$db->query("SET @@session.sql_mode = 'MYSQL40'");
Изтрийте реда — няма смисъл да го запазвате зад коментари, понеже цялата папка /install трябва да се премахне след успешната инсталация на платформата… Запишете файла, излезте и се върнете обратно в инсталатора. Ще ви се наложи отново да въведете данните за връзка с БД и за достъп до админ панела на сайта, но след това инсталацията ще приключи успешно.
P.S. Ако инсталирате OpenCart през конзола, трябва да направите същата редакция, но във файла install/cli_install.php
АКО НАПИСАНОТО ВИ ДОПАДА…
Абонирайте се за моя блог!
Ще получавате съобщение, когато публикувам нова статия. Можете да се отпишете по всяко време.