在本地工作,无法在Laravel中连接到远程数据库

时间:2012-10-06 20:58:18

标签: pdo laravel laravel-3

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

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

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

3 个答案:

答案 0 :(得分:0)

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

看看这个问题的接受答案:

Remote mySQL connection throws "cannot connect to MySQL 4.1+ using the old insecure authentication" error from XAMPP

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

答案 1 :(得分:0)

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

答案 2 :(得分: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中进行了测试