Mysqli::__construct(): (HY000/1045): Access denied

Интересный сегодня баг поймал ))

Создал базу данных и к ней юзера c паролем через ISPmanager. Закинул скрипт CS-Cart, запустил install, ввел данные базы и после завершения установки получил красную медальку “SERVICE UNAVAILABLE” и ошибку:
Warning: mysqli::__construct(): (HY000/1045): Access denied for user 'username'@'172.17.0.1' (using password: YES) in /path/to/script/app/Tygh/Backend/Database/Mysqli.php on line 47

полчаса голову ломал, не первая установка магазина же… оказывается я пароль сгенерировал хитрый, типа: j-[z}f,v}'ExmKy

из-за кавычки )) интересный факт, что установщику эта кавычка не помешала создать таблицы в базе.

А в файле config.local.php что в строчке

$config['db_password'] = 'j-[z}f,v}'ExmKy';

кавычка задублирована

$config['db_password'] = 'j-[z}f,v}''ExmKy';

или изъята

$config['db_password'] = 'j-[z}f,v}ExmKy';

?

было так:
$config['db_password'] = 'j-[z}f,v}\'ExmKy';
но я вообще пароль поменял на другой.

ну это в корне неверно

$config['db_password'] = 'j-[z}f,v}'ExmKy';

верно с экранированием

$config['db_password'] = 'j-[z}f,v}\'ExmKy';

или кавычку обернуть в двойную кавычку

$config['db_password'] = "j-[z}f,v}'ExmKy";

Согласен. Только файл конфига создаётся автоматом и по идее это не моя задача ловить кавычки по скриптам )) Не считаю это ужасным багом, но для информации тем кто генерит безумные пароли пригодится.

Офтоп: alex_vp, а как здесь так красиво код подсвечивать?

Я именно об этом, разработчики упустили из вида такой вариант развития событий, по факту при записи в файл требуется экранирование кавычки при ее наличии.

Здравствуйте!

Экранирование спецсимволов было добавлено в версии 4.11.5, пожалуйста, уточните, в какой версии вам удалось воспроизвести проблему?

В качестве проверки я создал нового пользователя и выполнил установку CS-Cart версии 4.13.3, ошибку не воспроизвёл, в config.local.php кавычка в пароле заэкранировалась.

Версию не помню. В свежей версии проблема не наблюдается.