Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'
Обновил MV-Framework до версии 3.4.2. Соответственно обновил и инфраструктуру - mysql:8.0.29 и php:8.2. Стала вылазить следующая ошибка:
Exception: SQLSTATE[42000]: Syntax error or access violation: 1231 Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER' in line 118 of file ~/core/database.class.php
В связи с чем, возникает три вопроса:
1) Зачем в последней версии, у которой в требованиях стоит PHP 8+ и PDO драйвер для MySQL, коде присутствует 'NO_AUTO_CREATE_USER', учитывая, что этот режим удалили в MySQL 8.0? А старые версии MySQL не умеют работать через PDO драйвер, необходимость которого явно заявлена в требованиях?
2) Ещё в конфиге в setup.php так же присутствует NO_AUTO_CREATE_USER в DbMode. Зачем?
3) Что с этим делать? Я понимаю, что я могу просто удалить NO_AUTO_CREATE_USER из database.class.php. Но это явно не правильный метод. Как оно вообще задумывалось?
P.S. Ниже кусок кода из database.class.php. Вот как он в последней версии у вас. Чтоб не искали
self::$pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if(self::$engine == "mysql")
{
$sql_mode = self::$registry -> getSetting("DbMode");
if(!$sql_mode && self::$registry -> getInitialVersion() < 2.4)
$sql_mode = "NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
if($sql_mode)
self::$pdo -> query("SET `sql_mode`='".$sql_mode."'");
}
Да, это старая настройка, ее надо отключить. В новой версии она уйдет из config/setup.php
Оставьте только одну настройку для mysql в config/setup.php и все должно наладиться.
'DbMode' => 'NO_ENGINE_SUBSTITUTION',