我刚刚使用此处推荐的步骤将我的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-compiled
和php artisan dump-autoload
。没效果。
答案 0 :(得分:2)
编辑:我提交了一个已经合并到4.2分支的修复程序。你不应该再担心这个错误了。
我明白了!这似乎是Laravel使用数据库配置的方式的变化,我希望这个答案可以帮助其他人。
简短版本是:如果您的连接配置类似于我的(在问题中),请从阵列中删除unix_socket
条目。
以前,我总是复制并编辑connections
数组中的默认条目,并将unix_socket
参数留空。显然现在有一个检查假设unix_socket
存在,它应该使用套接字DSN字符串。我的配置中的空字符串通过了检查。您可以在/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php
中看到这种情况。函数getDsn
,getSocketDsn
和getHostDsn
讲述了这个故事。
粘贴,因为这最终会改变:
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}";
}