Ошибки соединения с базой данных Laravel, или чудес не бывает


После установки XAMPP начались проблемы с базой данных. Сначала оказалось, что у меня на компьютере уже есть Mysql (что, в общем-то не явилось новостью) – и она уже висит на порту 3306. Вылезшие ошибки:

Found Path: "C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld" --defaults-file="C:\Program Files\MySQL\MySQL Server 5.5\my.ini" MySQL
6:11:15  [mysql] 	Expected Path: d:\xampp\mysql\bin\mysqld.exe --defaults-file=d:\xampp\mysql\bin\my.ini mysql
Решается несложно – создаем новую службу mysqweb к примеру, в которой запускаем mysqld.exe XAMPP и запускаем её вручную. Также не забываем заменить порты в файлах конфигов my.ini и php.ini

mysqli.default_port=3307
Отлично, теперь phpMyAdmin работает и тестовое подключение тоже:

$conn = new mysqli("localhost", "forge", "forge", "forge", 3307);
  
if ($conn->connect_error) {
    die("Ошибка: невозможно подключиться: " . $conn->connect_error);
}
А вот

php artisan migrate
Все также вызывает ошибки



Причем как вы видите, мы поменяли .env и database.php настройки. Думаем, что дальше. Попробуем для начала получить полный текст ошибка – а то, как вы видите, в консоли у меня кириллица не хочет отображаться (и всякие танцы с бубнами конкретно в этом случае ничего не дают) – так что пишем ошибку в файл примерно так

$file = 'err.txt';
file_put_contents($file, $e->getMessage);
В файле появилось

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Этот хост неизвестен.
Ну что ж, понятно что проблема в адресе. Пробуем менять его всячески – меняем на 127.0.0.1. Ни в какую не получается. Может, кэш не обновляется? Пробуем разное:

php artisan config:clear
php artisan cache:clear
php artisan config:cache
composer dump-autoload
Нет, ничего. Мистика? Да не может такого быть. Лезем снова в файл vendor\laravel\framework\src\Illuminate\Database\Connection.php, добавляем вывод:

var_dump (config('database.connections'));
и начинаем его построчно изучать. И вот тут находим – переменная DB_HOST имеет значение mysql! Снова лезем в .env и видим следующую картину:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_HOST=mysql
DB_PORT=3307
DB_DATABASE=forge
DB_USERNAME=forge
DB_PASSWORD=forge
Мда. Вторая строка DB_HOST перебивает (точнее вставляет новое значение) локалхост. Просто убираем DB_HOST=mysql, очищаем кэш и все отлично запускается.

Мораль проста: чудеса может и бывают в программировании, но все же лучше еще раз проверить файл конфига.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, базы данных, laravel




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Урок 11. Перечисления Java
Не работает поиск OpenCart при переносе
Продолжение с PhantomJS