OpenCart: ошибка mysqli::__construct() при установке - как исправить
Устанавливаете OpenCart, но вместо интернет-магазина видите пугающую надпись Fatal error: Uncaught mysqli::__construct(): ...? Вы не одни - это одна из самых распространённых проблем при развёртывании движка. В статье разберём, что означает ошибка, почему она возникает и как её устранить шаг за шагом - без лишней воды.
Что такое ошибка mysqli::__construct()
mysqli::__construct() - это PHP-метод, который открывает соединение с базой данных MySQL. Когда OpenCart пытается подключиться к БД при установке или первом запуске, PHP вызывает именно его. Если соединение не удаётся, скрипт падает с Fatal error.
Полный вид ошибки выглядит примерно так:
Fatal error: Uncaught mysqli::__construct(): (HY000/1045):
Access denied for user 'username'@'localhost' (using password: YES)или
Fatal error: Uncaught mysqli::__construct(): (HY000/2002):
No such file or directoryКод после HY000/ - ключ к причине. Именно он подскажет, куда смотреть.
Почему возникает ошибка: основные причины
Код ошибки | Причина |
|---|---|
1045 | Неверный логин/пароль к БД |
1049 | Указанная база данных не существует |
2002 | MySQL-сервер не запущен или неверный хост |
2003 | Нет соединения с MySQL (порт, firewall) |
1044 | У пользователя нет прав на базу |
Самые частые сценарии на практике:
Опечатка в данных БД во время установки OpenCart.
Пользователь БД не создан или ему не выданы права ALL PRIVILEGES.
MySQL не запущен на сервере / локальной машине.
Неверный хост: пишут localhost, а сервер ожидает 127.0.0.1 или сокет-путь.
Расширение mysqli отключено в php.ini.
Частые ошибки при установке OpenCart
1. Копируют данные БД с опечатками
При ручном вводе в инсталляторе OpenCart легко ошибиться в имени пользователя или пароле - особенно если пароль сгенерирован автоматически в панели хостинга.
2. Создают БД, но забывают привязать пользователя
В cPanel или ISPmanager база и пользователь - разные сущности. Мало создать обоих, нужно ещё явно назначить пользователя к базе с нужными правами.
3. Используют MySQL 8 без учёта нового метода аутентификации
MySQL 8 по умолчанию использует caching_sha2_password. Старые версии PHP/mysqli его не поддерживают и падают с ошибкой подключения.
4. Запускают OpenCart на локалке без запущенного MySQL
Установили XAMPP, но сервис MySQL не стартовал автоматически - и получают 2002.
Как исправить: пошаговое решение
Шаг 1. Прочитайте код ошибки
Откройте страницу установки и запишите число после / в скобках: 1045, 2002 и т.д. Это ваша отправная точка.
Шаг 2. Проверьте данные подключения к БД
Откройте файл config.php в корне OpenCart (если установка уже была) или сверьте значения, которые вводили в инсталляторе:
// Пример config.php
define('DB_HOSTNAME', 'localhost'); // или 127.0.0.1
define('DB_USERNAME', 'shop_user');
define('DB_PASSWORD', 'SuperSecret123');
define('DB_DATABASE', 'shop_db');
define('DB_PORT', '3306');
define('DB_PREFIX', 'oc_');Убедитесь, что каждое значение точно совпадает с тем, что задано в панели управления хостингом.
Шаг 3. Проверьте, существует ли база данных и пользователь
В cPanel:
Перейдите в «Базы данных MySQL».
Убедитесь, что база создана.
В разделе «Добавить пользователя в базу данных» проверьте, что пользователь привязан к этой базе с правами ALL PRIVILEGES.
Через консоль MySQL:
-- Подключитесь под root
mysql -u root -p
-- Проверьте список баз
SHOW DATABASES;
-- Проверьте права пользователя
SHOW GRANTS FOR 'shop_user'@'localhost';
-- Если прав нет - выдайте их
GRANT ALL PRIVILEGES ON shop_db.* TO 'shop_user'@'localhost';
FLUSH PRIVILEGES;Шаг 4. Убедитесь, что MySQL запущен
Linux (systemd):
sudo systemctl status mysql
# Если не запущен:
sudo systemctl start mysqlXAMPP (Windows): Откройте XAMPP Control Panel и нажмите Start рядом с MySQL.
Шаг 5. Проверьте хост подключения
Попробуйте заменить localhost на 127.0.0.1 в config.php или полях установщика. На некоторых серверах PHP не резолвит localhost через сокет, а только через TCP.
Шаг 6. Проверьте, включено ли расширение mysqli
php -m | grep mysqliЕсли строки mysqli нет - раскомментируйте в php.ini:
extension=mysqliИ перезапустите веб-сервер:
sudo systemctl restart apache2
# или
sudo systemctl restart nginx php8.1-fpmШаг 7. MySQL 8: исправьте метод аутентификации
Если используете MySQL 8 и PHP < 8.1, смените плагин аутентификации:
ALTER USER 'shop_user'@'localhost'
IDENTIFIED WITH mysql_native_password
BY 'SuperSecret123';
FLUSH PRIVILEGES;Примеры реальных сценариев
Сценарий А: хостинг Beget/Timeweb, ошибка 1045
Пользователь создал базу u12345_shop и пользователя u12345_user, но при установке OpenCart ввёл имя базы как shop (без префикса). Решение - скопировать точное имя базы из панели хостинга.
Сценарий Б: локальный XAMPP, ошибка 2002
MySQL не запустился из-за конфликта порта 3306 со Skype или другим приложением. Нужно изменить порт MySQL в my.ini на 3307 и указать его в config.php:
define('DB_PORT', '3307');Сценарий В: VPS с MySQL 8, PHP 7.4, ошибка 2054
Несовместимый плагин аутентификации. Решается командой ALTER USER выше или обновлением PHP до 8.x.
Часто задаваемые вопросы (FAQ)
Q: Ошибка появляется только при установке или и в готовом магазине?
A: В обоих случаях причина одна - проблема с подключением к БД. В готовом магазине проверьте config.php и admin/config.php.
Q: Как узнать правильные данные для подключения к БД на хостинге?
A: В личном кабинете хостинга, раздел «Базы данных». Хост обычно localhost, остальные данные задаются при создании БД.
Q: Почему localhost не работает, а 127.0.0.1 работает?
A: PHP может пытаться подключиться через Unix-сокет при localhost, а через TCP - при 127.0.0.1. Если сокет не настроен или путь неверный, используйте IP.
Q: У меня права ALL PRIVILEGES выданы, но ошибка 1045 осталась.
A: Убедитесь, что пользователь создан именно для хоста localhost (а не % или другого). Проверьте через SELECT User, Host FROM mysql.user;.
Q: Можно ли установить OpenCart без прав root на сервере?
A: Да. Достаточно прав на конкретную базу данных. Права root нужны только для создания пользователя и выдачи привилегий.
Q: После переноса магазина на новый хостинг появилась эта ошибка.
A: Обновите config.php и admin/config.php - в них прописаны данные старого сервера.
Q: Установщик OpenCart показывает красный крест напротив «MySQLi», что делать?
A: Расширение mysqli не установлено. На Debian/Ubuntu: sudo apt install php-mysqli, затем перезапустите Apache/Nginx.
Q: Ошибка исчезла, но теперь белый экран. Что дальше?
A: Включите отображение ошибок PHP в php.ini (display_errors = On) или смотрите лог ошибок сервера - вероятно, другая проблема с конфигурацией OpenCart.
Полезные советы и лучшие практики
Никогда не вводите данные БД вручную - копируйте из панели хостинга, чтобы исключить опечатки.
Проверяйте совместимость PHP и MySQL до установки. OpenCart 4.x требует PHP 8.0+, OpenCart 3.x - PHP 7.3+.
Не используйте root как пользователя БД для магазина - создайте отдельного пользователя с правами только на одну базу.
После установки удалите папку install/ - это требование безопасности и пункт чек-листа самого OpenCart.
Храните резервную копию config.php перед любыми изменениями.
Проверяйте логи: /var/log/mysql/error.log и лог PHP дадут точную причину.
Итог
Ошибка mysqli::__construct() в OpenCart - не приговор. В 95% случаев она решается за несколько минут: неверные данные БД, отсутствие прав пользователя или не запущенный MySQL. Читайте код ошибки, сверяйте настройки с панелью хостинга и следуйте шагам выше - и установка завершится успешно.
Комментарии
Чтобы оставить комментарий, войдите в аккаунт.