4.2升级后,Laravel无法连接到DB

时间:2014-07-30 11:01:40

标签: mysql laravel laravel-4

我刚刚使用此处推荐的步骤将我的Laravel安装从4.1。(某物)升级到4.2.7:http://laravel.com/docs/upgrade

现在我在每个页面上都收到此错误:

PDOException (2002) 
SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '' (111)

MySQL不是在本地运行,但它不应该是。我没有任何配置连接到本地MySQL,我的开发SQL服务器是远程的。为什么要尝试连接本地?

升级指南中是否有一些配置更改? 4.1中的一切都很好。

来自我的app/config/database.php文件:

'default'     => 'mysql',
...
'connections' => array(
    'mysql'       => array(
        'driver'        => 'mysql',
        'host'          => 'myrealdb.us-east-1.rds.amazonaws.com',
        'database'      => 'myrealdbname',
        'username'      => 'myrealuser',
        'password'      => 'myrealpass',
        'charset'       => 'utf8',
        'collation'     => 'utf8_unicode_ci',
        'prefix'        => '',
        'database_port' => '3306',
        'unix_socket'   => '',
    ),
    ...
);

为了以防万一,我尝试了php artisan clear-compiledphp artisan dump-autoload。没效果。

1 个答案:

答案 0 :(得分:2)

编辑:我提交了一个已经合并到4.2分支的修复程序。你不应该再担心这个错误了。

我明白了!这似乎是Laravel使用数据库配置的方式的变化,我希望这个答案可以帮助其他人。

简短版本是:如果您的连接配置类似于我的(在问题中),请从阵列中删除unix_socket条目。

以前,我总是复制并编辑connections数组中的默认条目,并将unix_socket参数留空。显然现在有一个检查假设unix_socket存在,它应该使用套接字DSN字符串。我的配置中的空字符串通过了检查。您可以在/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php中看到这种情况。函数getDsngetSocketDsngetHostDsn讲述了这个故事。

粘贴,因为这最终会改变:

protected function getDsn(array $config)
{
    return isset($config['unix_socket']) ? $this->getSocketDsn($config) : $this->getHostDsn($config);
}
...
protected function getSocketDsn(array $config)
{
    extract($config);

    return "mysql:unix_socket={$config['unix_socket']};dbname={$database}";
}
...
protected function getHostDsn(array $config)
{
    extract($config);

    return isset($config['port'])
        ? "mysql:host={$host};port={$port};dbname={$database}"
        : "mysql:host={$host};dbname={$database}";
}