Работая локально, не могу подключиться в Laravel к удаленной БД

Я пытаюсь работать локально в Laravel и у меня проблемы с подключением к удаленной базе данных. Я использовал свое доменное имя (domain.org) в качестве хоста, а затем пароль, имя пользователя и имя базы данных, как обычно. Но я получаю эту ошибку:

PDO::__construct(): Premature end of data (mysqlnd_wireprotocol.c:553)

Если я посмотрю на файл, где происходит ошибка, он находится в моем подключении PDO в драйвере MySQL. Я спросил моего провайдера о настройках, и он сказал, чтобы использовать domain.org или IP. Я попробовал оба, и я все еще получаю ошибку. Я попытался установить порт к стандартному 3306 и все еще получаю ошибку. Я не могу использовать localhost в качестве хоста, потому что это относится к моему локальному компьютеру. Может кто-нибудь помочь? Что мне нужно сделать, чтобы подключиться?

2 ответа

Чтобы использовать "Удаленный Mysql", вам нужно добавить свой IP-адрес в белый список на сервере, а также настроить Mysql для приема удаленных подключений.

Я думаю, что это разница между шифрованием, используемым в версии MySQL на вашем веб-хосте, и шифрованием, используемым вашей версией PHP.

Посмотрите на принятый ответ на этот вопрос:

Удаленное подключение к MySQL выдает ошибку "невозможно подключиться к MySQL 4.1+ с использованием старой небезопасной аутентификации" из XAMPP

Что касается решения, ваш веб-хост может или не может изменить ваши настройки MySQL - но я предполагаю, что если они работают на старой MySQL, они также будут работать на старой версии PHP. Laravel требует 5.3.

Старый вопрос, но многим это может понадобиться, поэтому добавлю, что сработало для меня

В 5.6+ также будет работать над версией арендодателя

DB_CONNECTION_REMOTE=mysql
DB_HOST_REMOTE=remotehost
DB_PORT_REMOTE=3306
DB_DATABASE_REMOTE=database_name
DB_USERNAME_REMOTE=database_user
DB_PASSWORD_REMOTE=database_password

и в config/database.php

 'connections' => [
  'mysqlRemote' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST_REMOTE', '127.0.0.1'),
            'port' => env('DB_PORT_REMOTE', '3306'),
            'database' => env('DB_DATABASE_REMOTE', 'forge'),
            'username' => env('DB_USERNAME_REMOTE', 'forge'),
            'password' => env('DB_PASSWORD_REMOTE', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => null,
        ],

а затем в вашем контроллере

$records = DB::connection('mysqlRemote')->select( DB::raw('SELECT `col1`, `col2` FROM `table`') );

если ваш IP занесен в белый список, он должен работать нормально, протестировано в Laravel 5.6

Другие вопросы по тегам