gpt4 book ai didi

mysql - Laravel 4.2 升级后无法连接数据库

转载 作者:行者123 更新时间:2023-11-29 07:56:22 25 4
gpt4 key购买 nike

我刚刚使用此处推荐的步骤将我的 Laravel 安装从 4.1.(something) 升级到 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 中一切都很美好。

来 self 的 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 以防万一。没有效果。

最佳答案

编辑:我为此提交了一个修复程序,该修复程序已合并到 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}";
}

关于mysql - Laravel 4.2 升级后无法连接数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25035135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com