OpenCart: ошибка mysqli::__construct() при установке - как исправить

mr. Cooper 2 часа назад Веб-разработка
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:

  1. Перейдите в «Базы данных MySQL».

  2. Убедитесь, что база создана.

  3. В разделе «Добавить пользователя в базу данных» проверьте, что пользователь привязан к этой базе с правами 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 mysql

XAMPP (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. Читайте код ошибки, сверяйте настройки с панелью хостинга и следуйте шагам выше - и установка завершится успешно.

Комментарии

Пока нет комментариев. Будьте первым, кто напишет.

Чтобы оставить комментарий, войдите в аккаунт.

Похожие статьи