0

我正在尝试在 Laravel 本地工作,但无法连接到远程数据库。我使用我的域名 (domain.org) 作为我的主机,然后像往常一样使用密码、用户名和数据库名称。但我得到这个错误:

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

如果我查看发生错误的文件,它在我的 MySQL 驱动程序中的 PDO 连接中。我向我的 ISP 询问设置,他说使用 domain.org 或 IP。我都试过了,我仍然得到错误。我尝试将端口设置为标准 3306,但仍然出现错误。我不能使用 localhost 作为我的主机,因为它会引用我的本地计算机。有人可以帮忙吗?我需要做什么才能连接?

4

3 回答 3

0

要使用“远程 Mysql”,您需要将您的 IP 添加到服务器上的白名单中,并将 Mysql 配置为接受远程连接

于 2012-10-07T15:55:50.840 回答
0

我认为这是您的 Web 主机上 MySQL 版本中使用的加密与您的 PHP 版本使用的加密之间的区别。

看看这个问题的公认答案:

远程 mySQL 连接从 XAMPP 引发“无法使用旧的不安全身份验证连接到 MySQL 4.1+”错误

至于解决方案,您的网络主机可能愿意也可能不愿意更改您的 MySQL 设置——但我猜如果他们运行的是旧的 MySQL,他们也会运行旧版本的 PHP。Laravel 需要 5.3。

于 2012-10-07T07:00:13.380 回答
0

老问题,但是,很多人可能需要这个,所以添加对我有用的

在 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 中测试

于 2019-03-18T12:39:10.600 回答